Dav*_*vid 14 javascript websocket
我问这些问题,因为这里我们有一个Jetty websocket实现的代码示例(服务器端).
如果我们等待足够长的时间,将发生超时,从而导致客户端上出现以下消息.
这肯定是我在使用长轮询时遇到的问题.它会停止进程以防止服务器过载,不是吗?
jfr*_*d00 28
如何实现Websockets?
webSockets实现如下:
因为只要双方都同意,套接字就会保持打开状态,这就为服务器提供了一个通道,可以在有新内容发送时将信息"推送"到客户端.这通常比使用客户端驱动的Ajax调用更有效,客户端必须定期轮询新信息.并且,如果客户端需要向服务器发送大量消息(可能类似于多玩家游戏),那么使用已经打开的套接字向服务器发送快速消息也比Ajax调用更有效.
由于webSockets的启动方式(从HTTP请求开始然后重新调整该套接字),它们与现有Web基础结构100%兼容,甚至可以在与现有Web请求相同的端口上运行(例如,端口80或443).这使得跨源安全性更加简单,并使客户端或服务器端基础结构上的任何人不必修改任何基础结构以支持webSocket连接.
这项新技术背后的算法是什么(与Long-Polling相比)?
这篇文章中有关于webSocket连接算法和webSocket数据格式如何工作的非常好的总结:编写WebSocket服务器.
在表现方面,他们怎么能比Long-Polling更好?
就其本质而言,长轮询是一种黑客行为.它的发明是因为发送给客户端的服务器启动的数据没有更好的选择.以下是步骤:
因此,虽然webSocket使用一个长期存在的套接字,客户端或服务器可以将数据发送到另一个,但是长轮询包括客户端询问服务器"你还有更多数据吗?" 一遍又一遍,每个都有一个新的http请求.
长时间的轮询工作正确,它在服务器基础设施,带宽使用,移动电池寿命等方面效率不高......
我想要的是对此的解释:Websockets在C/S之间保持开放连接的事实与Long Polling等待过程并不完全相同?换句话说,为什么Websockets不会使服务器过载?
在客户端和服务器之间维护一个开放的webSocket连接是服务器做的一件非常便宜的事情(它只是一个TCP套接字).一个不活动但开放的TCP套接字不占用服务器CPU,只占用很少的内存来跟踪套接字.正确配置的服务器一次可以容纳数十万个开放套接字.
另一方面,进行长轮询的客户端,即使没有新信息发送给它的客户端,也必须定期重新建立它的连接.每次重新建立新连接时,都会有TCP套接字拆除和新连接,然后是要处理的传入HTTP请求.
以下是关于缩放主题的一些有用的参考:
小智 5
关于网络套接字,长时间轮询和其他方法的很好的解释:
在什么情况下,AJAX长/短轮询优于HTML5 WebSockets?
长轮询 - 要求?等一下 反应。与AJAX一样,创建到服务器的连接,但是保持活动连接打开一段时间(虽然不长),在连接打开期间,客户端可以从服务器接收数据。由于超时或数据中断,客户端必须在连接关闭后定期重新连接。在服务器端,它仍然像HTTP请求一样与AJAX一样对待,只是请求的答案将在应用逻辑定义的现在或将来的某个时间发生。所有主要浏览器均支持。
WebSockets的 - 客户端?服务器。创建与服务器的TCP连接,并保持所需的时间。服务器或客户端可以轻松关闭它。客户端经过HTTP兼容的握手过程,如果成功,则服务器和客户端可以随时双向交换数据。如果应用程序需要两种方式都进行频繁的数据交换,这将非常有效。WebSocket确实具有数据框架,其中包括对从客户端发送到服务器的每条消息的屏蔽,因此可以简单地对数据进行加密。支持图(很好)
总体而言,套接字比长轮询具有更好的性能,您应该使用套接字而不是长轮询。
| 归档时间: |
|
| 查看次数: |
6813 次 |
| 最近记录: |