Tornado-长轮询_webSocket

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tornado-长轮询_webSocket相关的知识,希望对你有一定的参考价值。

参考技术A

轮询与长轮询都是基于HTTP的,两者本身存在着缺陷:轮询需要更快的处理速度;长轮询则更要求处理并发的能力;两者都是“被动型服务器”的体现:服务器不会主动推送信息,而是在客户端发送ajax请求后进行返回的响应。而理想的模型是"在服务器端数据有了变化后,可以主动推送给客户端",这种"主动型"服务器是解决这类问题的很好的方案。Web Sockets就是这样的方案。
由于长轮询消耗太多资源,主要原因是客户端和服务器并没有连接在一起,能够让客户端和服务器一直保持连接,这就需要用到websocket。

应用场景:实现即时通讯:如股票交易行情分析、聊天室、在线游戏等,替代轮询和长轮询。

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

介绍:
WebSocket 协议是基于 TCP 的一种新的 html5 网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并被RFC7936所补充规范。在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
简单说:客户端和服务器一直连接在一起。

浏览器通过 javascript 向服务器发出建立 WebSocket 连接的请求,连接建立以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。当你获取 Web Socket 连接后,你可以通过 send() 方法来向服务器发送数据,并通过 onmessage 事件来接收服务器返回的数据。

运行效果:

Tornado 定义了 tornado.websocket.WebSocketHandler 类用于处理 WebSocket 链接的请求,应用开发者应该继承该类并实现其中的open()、on_message()、on_close() 函数,除了这3个 Tornado 框架自动调用的入口函数,WebSocketHandler 还提供了两个开发者主动操作 WebSocket的函数:
WebSocketHandler.write_message(message)函数:用于向与本链接相对应的客户端写消息。
WebSocketHandler.close(code=None,reason=None)函数:主动关闭 WebSocket链接。其中的code和reason用于告诉客户端链接被关闭的原因。参数code必须是一个数值,而reason是一个字符串。

长轮询,websocket

  1. 短轮询:server立即响应client的请求

  2. 长轮询:server经过一段时间后响应client的请求

  3. 长连接:server在响应client的请求之后依然保持连接,client可以使用此连接进行下一次请求

  4. webSocket:以上三种是基于http协议,websocket是新的协议,取消了client和server的概念。上面的三种会多次传送http的header。

以上是关于Tornado-长轮询_webSocket的主要内容,如果未能解决你的问题,请参考以下文章

轮询长轮询和websocket

轮询长轮询和websocket

长轮询,websocket

WebSockets 和长轮询

ASP.NET 上的 WebSockets/长轮询 - 共享主机?

轮询长轮询长连接socket连接WebSocket