- Websockets是如何实现的?
- 与长轮询相比,这项新技术背后的算法是什么?
- 它们在性能方面如何比长轮询更好?
我提出这些问题是因为这里有Jetty websocket实现(服务器端)的示例代码。
如果我们等待足够长的时间,超时将发生,导致客户端显示以下消息。
这绝对是我在使用长轮询时遇到的问题。 它会停止进程以防止服务器超载,不是吗?
我提出这些问题是因为这里有Jetty websocket实现(服务器端)的示例代码。
如果我们等待足够长的时间,超时将发生,导致客户端显示以下消息。
这绝对是我在使用长轮询时遇到的问题。 它会停止进程以防止服务器超载,不是吗?
因此,尽管webSocket使用一个长连接套接字,可以让客户端或服务器相互发送数据,但长轮询则是由客户端一遍又一遍地向服务器询问“你还有更多的数据吗?”每次询问都需要发起新的http请求。
当长轮询正确使用时,它在服务器基础设施、带宽使用、移动电池寿命等方面效率不高。
我想要解释一下:Websockets保持C/S之间的开放连接与Long Polling等待过程不太相同吗?换句话说,为什么Websockets不会使服务器超载?
在客户端和服务器之间维护一个开放的webSocket连接对于服务器来说是非常廉价的事情(只是一个TCP套接字)。一个非活动但开放的TCP套接字不需要服务器CPU,并且只需要极少量的内存来跟踪套接字。适当配置的服务器可以同时拥有数十万个开放的套接字。
另一方面,即使没有新信息要发送给客户端,执行长轮询的客户端也必须定期重新建立其连接。每次重新建立新连接时,都会进行TCP套接字拆除和新连接,然后处理传入的HTTP请求。
以下是有关扩展主题的一些有用参考资料:
关于web sockets、长轮询和其他方法的非常好的解释:
在什么情况下,AJAX长/短轮询比HTML5 WebSockets更可取?
长轮询 - 请求→等待→响应。与AJAX一样创建到服务器的连接,但会保持活动状态一段时间(不长),在连接打开期间,客户端可以从服务器接收数据。当连接由于超时或数据eof而关闭后,客户端必须定期重新连接。在服务器端,它仍然像AJAX一样被视为HTTP请求,除了现在或将来由应用程序逻辑定义的请求回复。支持所有主要浏览器。
WebSockets - 客户端↔服务器。创建到服务器的TCP连接,并保持所需的时间。服务器或客户端可以轻松地关闭它。如果客户端经过HTTP兼容握手过程,则可以交换来自服务器和客户端的任何时间的数据。如果应用程序需要频繁的双向数据交换,则非常高效。WebSockets具有数据帧,其中包括每个从客户端发送到服务器的消息掩码,因此数据被简单加密。支持表格(非常好)。
总的来说,套接字比长轮询具有更好的性能,因此应该使用它们而不是长轮询。