首页 > 其他分享 >HTML5 WebSocket 详解及使用

HTML5 WebSocket 详解及使用

时间:2024-01-29 10:33:55浏览次数:22  
标签:WebSocket Socket 详解 HTML5 HTTP 客户端 连接 websock

WebSocket 没用过的同学,听上去,可能觉得很难,其实很简单,本章讲解了WebSocket基本信息,以及附有代码例子

WebSocket 是什么?
WebSocket 是 HTML5 提供的一种在单个 TCP 连接上进行全双工通讯的协议。(双向通信协议)

WebSocket 的作用?
实现客户端与服务器之间的双向通信,允许服务端主动向客户端推送数据。

在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

WebSocket 和 HTTP 区别?
相同点:

        1. WebSocket  都是一样基于 TCP 的可靠性传输协议;

异同点:

        1. WebSocket  可以双向发送或接受信息,而 HTTP 是单向的(HTTP 通信只能由客户端发起,不具备服务器主动推送能力);

        2. WebSocket  的使用,需要先进行一次 客户端与服务器的握手,两者建立连接后才可以正常双向通信,而 HTTP 是一个 主动的 Request 对应一个 被动的Response;

WebSocket 的协议标识符?
如果服务器网址是 HTTP 那么 WebSocket  对应的是 ws

如果服务器网址是 HTTPS 加密的 那么 WebSocket  对应的是 wss

WebSocket 的作用总结?
WebSocket  是为了能够实现在 web 应用上与服务器进行双向通信的需求 而产生出来的协议,

相比于轮询 HTTP 请求的方式,WebSocket 节省了服务器资源,有效的提高了效率。
WebSocket 常用方法
常用方法    描述
Socket.send()    通过 Socket 向服务器发送信息
Socket.close()    关闭 Socket 连接

WebSocket 常用属性
常用属性    描述    
Socket.readyState    获取当前链接状态    0:正在连接中,1:连接正常可以通信,2:连接关闭中,3:连接已关闭/连接失败
Socket.url    获取当前连接地址    
Socket.binaryType    获取传输的数据类型    


WebSocket 生命周期
生命周期    描述
Socket.onopen     连接建立时触发
Socket.onmessage    客户端接收服务端数据时触发
Socket.onerror    通信发生错误时触发
Socket.onclose    连接关闭时触发
// 设定默认值
var websock = null;
 
// 每10分钟 通过 websocket 向服务器发送一次心跳 证明客户端没有离线 依然在线可以正常接受消息
setInterval(this.websocketsend, 100000);
 
 
initWebsocket() {
    /*
    * 初始化 websock
    * 连接 服务器地址
    * 并绑定 websock 四个事件方法
    */
    this.websock = new WebSocket('ws://localhost:8080?userId=1');
    // 接收服务器返回的数据
    this.websock.onmessage = this.websocketonmessage;
    // 连接建立时触发
    this.websock.onopen = this.websocketonopen;
    // 连接中发生异常
    this.websock.onerror = this.websocketonerror;
    // 连接关闭时触发
    this.websock.onclose = this.websocketclose;
}
 
 
websocketonopen() {
    /*
    * websocket 初始化后 执行的方法
    * 调用 发送数据方法    
    */
    this.websocketsend();
},
 
 
websocketonerror() {
    /*
    * websocket 连接建立失败 执行的方法
    * 注:我这里加了个判断,如果联系建立失败就在连接几次
    */
    if(this.cishu < 5){
        this.cishu = this.cishu + 1;
        this.initWebsocket();
    }
},
 
 
websocketsend() {
    
    /*
    * websocket 数据发送 通过 websock.send() 方法向服务器发送数据
    * 注:这里随便发哈,主要作用就是通过这个动作,让客户端与服务端建立联系
    */
    let actions = {
        "test": "12345"
    };
    this.websock.send(JSON.stringify(actions));
},
 
 
websocketclose(e) { 
    /*
    * websocket 连接关闭 执行的方法
    */
    console.log('断开连接', e);
},
 
 
websocketonmessage(e) {
    /*
    * websocket 数据接收 执行的方法
    * 注:服务器通过 websocke 向客户端发送数据时,这里的方法就会自动触发啦
    */
    const redata = JSON.parse(e.data);
    switch (redata.messageType) {
        case 0: // 售后 提示
        // ... 执行
        break;
        case 1: // 库存 提示
        // ... 执行
        break;
        case 2: // 下架 提示
        // ... 执行
        break;
    }
},
 
 

 

 

 

 

 

 

----

标签:WebSocket,Socket,详解,HTML5,HTTP,客户端,连接,websock
From: https://www.cnblogs.com/qiynet/p/17993967

相关文章

  • PDF标准详解(一)——PDF文档结构
    已经很久没有写博客记录自己学到的一些东西了。但是在过去一年的时间中自己确实又学到了一些东西。一直攒着没有系统化成一篇篇的文章,所以今年的博客打算也是以去年学到的一系列内容为主。通过之前Vim系列教程的启发,我发现还是写一些系列文章对自己的帮助最大。它能最大化自己的学......
  • 关于三次握手和四次挥手的详解
    我一看到TCP,啪就点进来了,很快啊。  TCP报文   一个完整的TCP报文头部共有20个字节,其中包括:源端口号(16位)和目的端口号(16位):再加上ip首部的源ip地址和目的IP地址可以唯一确定一个TCP连接。数据序号(16位):表示在这个报文段中的第一个数据字节序号。确认序号:仅当......
  • 详解Smooth_L1_Loss函数的计算方式
    详解SmoothL1Loss函数的计算方式在深度学习中,SmoothL1Loss函数是一种用于回归任务的损失函数。它在一定程度上克服了均方误差(MSE)损失函数的局限性,特别适用于处理离群值。简介SmoothL1Loss函数是HuberLoss的一种近似形式。它通过引入平滑因子,使损失函数在离群值附近呈现鲁棒......
  • 网络要素服务(WFS)详解
    通过实例详细介绍了WebGIS中网络要素服务(WFS)的具体内容。目录1.概述2.GetCapabilities3.DescribeFeatureType4.GetFeature4.1Get访问方式4.2Post访问方式5.Transaction5.1Insert5.2Replace5.3Update5.4Delete6注意事项1.概述WMS是一个返回图片......
  • APISIX同时代理websocket和http请求 websocket无法正常工作
    1.配置了一个路由同时代理websocket和http请求 2.打开了websocket支持,websocket还是无法工作  3.定位3.1通过postman分别走apisix和不经过apisix建立websocet连接,发现经过apisix也能成功建立连接,但是10秒左右就自己断开了。  3.2思考3.3决定试一下是否和超时配置有关,改一下改......
  • 卷积神经网络详解+Python实现卷积神经网络Cifar10彩色图片分类
    原文链接:https://blog.csdn.net/master_hunter/article/details/133156758卷积神经网络相对于普通神经网络在于以下四个特点:局部感知域:CNN的神经元只与输入数据的一小部分区域相连接,这使得CNN对数据的局部结构具有强大的敏感性,可以自动学习到图像的特征。参数共享:在CNN中,同一个......
  • 2024最新苹果iOS17.3微信分身详解分享
    微信是目前最流行的社交软件之一,拥有庞大的用户群体。然而,对于一些需要同时使用多个微信账号的用户来说,使用官方版微信就显得有些不方便。iOS分身微信软件可以解决这个问题,它可以让用户在同一台设备上同时登录多个微信账号,从而实现工作生活两不误。iOS分身微信软件的优势iOS......
  • MySQL 事务详解
    在数据库中,事务是一组操作单元,它们被视为一个独立的工作单元,要么完全执行,要么完全不执行。MySQL提供了强大的事务支持,允许开发者以一致的方式管理数据库操作。1.事务基础首先,我们需要了解事务的基础概念。一个事务通常包括以下几个关键特性:原子性(Atomicity):事务中的所有操作......
  • C# 继承、多态性、抽象和接口详解:从入门到精通
    C#继承在C#中,可以将字段和方法从一个类继承到另一个类。我们将“继承概念”分为两类:派生类(子类)-从另一个类继承的类基类(父类)-被继承的类要从一个类继承,使用:符号。在以下示例中,Car类(子类)继承了Vehicle类(父类)的字段和方法:示例classVehicle//基类(父类){......
  • 详解'unicodeescape' codec can't decode bytes in position 16-17: malformed \N ch
    详解'unicodeescape'codeccan'tdecodebytesinposition16-17:malformed\Ncharacterescape在Python的字符串处理中,有时候可能会遇到如下错误信息:'unicodeescape'codeccan'tdecodebytesinposition16-17:malformed\Ncharacterescape。本篇文章将详细解释这个错......