websocket -- 备面试装逼使用

1.WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。建立在传输层(tcp之上)


2.

WebSocket protocol 。
现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客户端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏览器需要不断的向服务器发出请求,然而HTTP request 的header是非常长的,里面包含的有用数据可能只是一个很小的值,这样会占用很多的带宽。
(Ajax技术可达到全双工通信,却需要客户端发起请求,而WebSocket服务器和客户端可以彼此相互推送信息;XHR技术受到域的限制,而WebSocket允许跨域通信;l ong poll 其实原理跟 ajax轮询 差不多,都是采用轮询的方式,不过采取的是阻塞模型,也就是说,客户端发起连接后,如果没消息,就一直不返回Response给客户端。直到有消息才返回,返回完之后,客户端再次建立连接,周而复始。) ajax轮询 需要服务器有很快的处理速度和资源。(速度) long poll 需要有很高的并发,也就是说同时接待客户的能力。(场地大小) 由于HTTP是非状态性的,每次都要 重新传输identity info(鉴别信息) ,来告诉服务端你是谁。)
在 WebSocket API,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。在此WebSocket 协议中,为我们实现即时服务带来了两大好处:
1. Header
互相沟通的Header是很小的-大概只有 2 Bytes
2. Server Push
服务器的推送,服务器不再被动的接收到浏览器的request之后才返回数据,而是在有新数据时就主动推送给浏览器。

3.
这里简单说明一下WebSocket握手的过程。

当Web应用程序调用new WebSocket(url)接口时,Browser就开始了与地址为url的WebServer建立握手连接的过程。

1.     Browser与WebSocket服务器通过TCP三次握手建立连接,如果这个建立连接失败,那么后面的过程就不会执行,Web应用程序将收到错误消息通知。

2.     在TCP建立连接成功后,Browser/UA通过http协议传送WebSocket支持的版本号,协议的字版本号,原始地址,主机地址等等一些列字段给服务器端。

例如:

  1. GET /chat HTTP/1.1  
  2. Host: server.example.com  
  3. Upgrade: websocket  
  4. Connection: Upgrade  
  5. Sec-WebSocket-Key:dGhlIHNhbXBsZSBub25jZQ==  
  6. Origin: http://example.com  
  7. Sec-WebSocket-Protocol: chat,superchat  
  8. Sec-WebSocket-Version: 13 

3.     WebSocket服务器收到Browser/UA发送来的握手请求后,如果数据包数据和格式正确,客户端和服务器端的协议版本号匹配等等,就接受本次握手连接,并给出相应的数据回复,同样回复的数据包也是采用http协议传输。

  1. HTTP/1.1 101 Switching Protocols  
  2. Upgrade: websocket  
  3. Connection: Upgrade  
  4. Sec-WebSocket-Accept:s3pPLMBiTxaQ9kYGzzhZRbK+xOo=  
  5. Sec-WebSocket-Protocol: chat  

4.     Browser收到服务器回复的数据包后,如果数据包内容、格式都没有问题的话,就表示本次连接成功,触发onopen消息,此时Web开发者就可以在此时通过send接口想服务器发送数据。否则,握手连接失败,Web应用程序会收到onerror消息,并且能知道连接失败的原因。

  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python的websocket-client库可以轻松地实现Websocket客户端的功能。下面是一个简单的示例,演示如何使用websocket-client库连接到Websocket服务器,并发送和接收消息。 首先,需要安装websocket-client库。可以使用以下命令在命令行中安装: ``` pip install websocket-client ``` 接下来,使用以下代码片段连接到Websocket服务器并发送和接收消息: ```python import websocket def on_message(ws, message): print("Received message: ", message) def on_error(ws, error): print("Error: ", error) def on_close(ws): print("Connection closed") def on_open(ws): print("Connection opened") ws.send("Hello, Server!") if __name__ == "__main__": websocket.enableTrace(True) ws = websocket.WebSocketApp("ws://echo.websocket.org/", on_open = on_open, on_message = on_message, on_error = on_error, on_close = on_close) ws.run_forever() ``` 在上面的代码中,我们定义了四个回调函数: - on_message(): 当接收到消息时被调用 - on_error(): 当连接出现错误时被调用 - on_close(): 当连接被关闭时被调用 - on_open(): 当连接成功打开时被调用 我们还启用了websocket库的调试跟踪功能,通过将enableTrace设置为True。然后,我们使用WebSocketApp类创建一个Websocket客户端实例,并指定回调函数。最后,我们调用run_forever()函数来启动Websocket客户端并保持连接。 在on_open()回调函数中,我们向服务器发送一条“Hello, Server!”的消息。当我们从服务器收到回复时,on_message()回调函数将被调用,并打印接收到的消息。如果出现任何错误,则on_error()回调函数将被调用。当连接被关闭时,on_close()回调函数将被调用。 这是一个非常简单的例子,但它展示了如何使用websocket-client库连接到Websocket服务器并发送和接收消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值