首页 > 其他分享 >WebSocket

WebSocket

时间:2023-11-27 15:24:55浏览次数:31  
标签:浏览器 Socket 连接 ws WebSocket pywebsocket

HTML5 WebSocket

WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。

WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

现在,很多网站为了实现推送技术,所用的技术都是 Ajax 轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。

HTML5 定义的 WebSocket 协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。

浏览器通过 JavaScript 向服务器发出建立 WebSocket 连接的请求,连接建立以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。

当你获取 Web Socket 连接后,你可以通过 send() 方法来向服务器发送数据,并通过 onmessage 事件来接收服务器返回的数据。

以下 API 用于创建 WebSocket 对象。

varSocket=newWebSocket(url,[protocol]);

以上代码中的第一个参数 url, 指定连接的 URL。第二个参数 protocol 是可选的,指定了可接受的子协议。


WebSocket 属性

以下是 WebSocket 对象的属性。假定我们使用了以上代码创建了 Socket 对象:

属性描述
Socket.readyState

只读属性 readyState 表示连接状态,可以是以下值:

  • 0 - 表示连接尚未建立。

  • 1 - 表示连接已建立,可以进行通信。

  • 2 - 表示连接正在进行关闭。

  • 3 - 表示连接已经关闭或者连接不能打开。

Socket.bufferedAmount

只读属性 bufferedAmount 已被 send() 放入正在队列中等待传输,但是还没有发出的 UTF-8 文本字节数。


WebSocket 事件

以下是 WebSocket 对象的相关事件。假定我们使用了以上代码创建了 Socket 对象:

事件事件处理程序描述
open Socket.onopen 连接建立时触发
message Socket.onmessage 客户端接收服务端数据时触发
error Socket.onerror 通信发生错误时触发
close Socket.onclose 连接关闭时触发

WebSocket 方法

以下是 WebSocket 对象的相关方法。假定我们使用了以上代码创建了 Socket 对象:

方法描述
Socket.send()

使用连接发送数据

Socket.close()

关闭连接


WebSocket 实例

WebSocket 协议本质上是一个基于 TCP 的协议。

为了建立一个 WebSocket 连接,客户端浏览器首先要向服务器发起一个 HTTP 请求,这个请求和通常的 HTTP 请求不同,包含了一些附加头信息,其中附加头信息"Upgrade: WebSocket"表明这是一个申请协议升级的 HTTP 请求,服务器端解析这些附加的头信息然后产生应答信息返回给客户端,客户端和服务器端的 WebSocket 连接就建立起来了,双方就可以通过这个连接通道自由的传递信息,并且这个连接会持续存在直到客户端或者服务器端的某一方主动的关闭连接。

客户端的 HTML 和 JavaScript

目前大部分浏览器支持 WebSocket() 接口,你可以在以下浏览器中尝试实例: Chrome, Mozilla, Opera 和 Safari。

runoob_websocket.html 文件内容

<!DOCTYPE HTML><html><head><metacharset="utf-8"><title>十一先生</title>
    
      <scripttype="text/javascript">functionWebSocketTest(){if("WebSocket" in window){
               alert("您的浏览器支持 WebSocket!");// 打开一个 web socketvar ws =newWebSocket("ws://localhost:9998/echo");
                
               ws.onopen =function(){// Web Socket 已连接上,使用 send() 方法发送数据
                  ws.send("发送数据");
                  alert("数据发送中...");};
                
               ws.onmessage =function(evt){var received_msg = evt.data;
                  alert("数据已接收...");};
                
               ws.onclose =function(){// 关闭 websocket
                  alert("连接已关闭...");};}else{// 浏览器不支持 WebSocket
               alert("您的浏览器不支持 WebSocket!");}}</script>
        
   </head><body><divid="sse"><ahref="javascript:WebSocketTest()">运行 WebSocket</a></div></body></html>


安装 pywebsocket

在执行以上程序前,我们需要创建一个支持 WebSocket 的服务。从 pywebsocket 下载 mod_pywebsocket ,或者使用 git 命令下载:

git clone https://github.com/googlearchive/pywebsocket<p>
mod_pywebsocket  需要 python 环境支持</p>
mod_pywebsocket 是一个Apache HTTP 的WebSocket扩展,安装步骤如下:</p><ul><li><p>解压下载的文件。</p></li><li><p>进入<b>pywebsocket</b> 目录。</p></li><li><p>执行命令:</p><pre>$ python setup.py build
$ sudo python setup.py install

 


  • 查看文档说明:

    $ pydoc mod_pywebsocket

     


开启服务

pywebsocket/mod_pywebsocket 目录下执行以下命令:

$ sudo python standalone.py -p 9998-w ../example/

以上命令会开启一个端口号为 9998 的服务,使用 -w 来设置处理程序 echo_wsh.py 所在的目录。

现在我们可以在 Chrome 浏览器打开前面创建的 runoob_websocket.html 文件。如果你的浏览器支持 WebSocket(), 点击"运行 WebSocket",你就可以看到整个流程各个步骤弹出的窗口,流程 Gif 演示:

在我们停止服务后,会弹出 "连接已关闭..."。

标签:浏览器,Socket,连接,ws,WebSocket,pywebsocket
From: https://www.cnblogs.com/shiyitongyue/p/17859418.html

相关文章

  • python学习笔记-websocket介绍
    一、websocket介绍概述-http,socket实现,短链接,请求响应-websocket,socket实现,双工通道,请求响应,推送socket创建连接,不断开二、websocket握手过程分析socket入手-服务端(socket服务端)1、服务端开启socket,监听IP和端口3、允许连接*5、服务端接收特殊值【加密sha1,特殊值,magic......
  • webSocket wss 逆向
    1.WebSocket在浏览器和服务器之间建立持久连接来交换数据的方法。数据可以作为“数据包”在两个方向上传递,而无需中断连接也无需额外的HTTP请求2.简单使用letsocket=newWebSocket("wss://javascript.info/article/websocket/demo/hello");//创建WebSocketsocket.o......
  • 前端建立WebSocket连接
    WebSockets是H5提供的在web应用程序中客户端与服务器端之间进行的非HTTP的通信机制。当服务器想向客户端发送数据时,可以立即将数据推送到客户端的浏览器中,无需重新建立连接。只要客户端有一个被打开的socket(套接字)并且与服务器建立了连接,服务器就可以把数据推送到这个socket上,......
  • websocket和http区别
    一、HTTPHTTP全称是“超文本传输协议”(HypertextTransferProtocol),是Web应用程序最为广泛使用的协议之一。它建立在TCP协议之上,通过请求-响应模式来传输数据。在HTTP中,客户端发送一个请求到服务器,服务器接收到请求后,返回相应的响应。这个过程通常涉及到以下步骤:客户端向服......
  • WebSocket魔法师:打造实时应用的无限可能
    1、背景在开发一些前端页面的时候,总是能接收到这样的需求:如何保持页面并实现自动更新数据呢?以往的常规做法,是前端使用定时轮询后端接口,获取响应后重新渲染前端页面,这种做法虽然能达到类似的效果,但是依然有很多缺点,缺点就不在这里说了,感兴趣的小伙伴可以自行查阅一下。现在让我们......
  • websocket的消息丢失处理,以及前端监听心跳处理方案
    消息丢失处理方案:1、后台通过websocket传输给前端消息,并且后台生成校验此消息的定时任务,设置每5秒重发2、前端接收到消息后将消息通过websocket传输给后台3、后台如接收到前端的消息则删除对应的发送消息定时任务,如未收到消息则继续发送,设置最多发送5次(超过5次默认认为此条消......
  • Spring Boot + WebSocket 实时监控,实战来了!
    写在前面此异常非彼异常,标题所说的异常是业务上的异常。最近做了一个需求,消防的设备巡检,如果巡检发现异常,通过手机端提交,后台的实时监控页面实时获取到该设备的信息及位置,然后安排员工去处理。因为需要服务端主动向客户端发送消息,所以很容易的就想到了用WebSocket来实现这一功......
  • js实现webSocket客户端
    var ws= new WebSocket("ws://localhost:8080/msg");//readyState属性返回实例对象的当前状态,共有四种。//CONNECTING:值为0,表示正在连接。//OPEN:值为1,表示连接成功,可以通信了。//CLOSING:值为2,表示连接正在关闭。//CLOSED:值为3,表示连接已经关闭,或者打开连接失败//例如:if......
  • sse_server sent event_eventSource_websocket替代_socketio替代_服务器端事件
    eventsourcebackend#-*-coding:utf-8-*-#这段代码是使用FastAPI框架创建一个简单的服务器端事件(Server-SentEvents,SSE)的示例。以下是对代码的详细解析:#1.`importjson,random,...`:这行代码导入了需要的Python模块。#2.`event_router=APIRouter()`:这行代码创建......
  • 使用websocket开发智能聊天机器人
    前面我们学习了异步web框架(sanic)和http异步调用库httpx,今天我们学习websocket技术。websocket简介我们知道HTTP协议是:请求->响应,如果没有响应就一直等着,直到超时;但是有时候后台的处理需要很长时间才能给到结果,比如30分钟,那HTTP的请求不可能等这么久,所以,可以通过Ajax轮询来解决。......