我最近一直在使用websockets。创建了我自己的服务器,有一个public demo。我没有这样详细的经验或知识重新:http。 (虽然因为websocket请求是升级的http请求,我有一些。)
在我的结尾,服务器报告每次点击的详细信息。其中包括一堆http keep-alive请求。我的服务器不处理它们,因为它们不是websocket请求。但它让我好奇心。
websockets的重要一点是连接保持活跃。然后你可以在两个方向传递消息(同时甚至)。我已经读过,Stay-Alive HTTP连接是一个相对较新的开发(我不知道人们有多少年的时间,只是它只包含在最新的标准中 - 1.1 - 现在真的老了吗?)
我想我可以假设两者之间存在行为差异,或者没有理由选择websocket标准?有什么区别?
答案 0 :(得分:37)
自HTTP 1.0以来的Keep Alive HTTP标头,用于指示HTTP客户端希望与HTTP服务器保持持久连接。主要目的是消除为每个HTTP请求打开TCP连接的需要。但是,虽然打开了持久连接,但客户端和服务器之间的通信协议仍然遵循基本的HTTP请求/响应模式。换句话说,服务器端无法将数据推送到客户端。
WebSocket是完全不同的机制,用于建立持久的全双工连接。通过这种全双工连接,服务器端可以将数据推送到客户端,客户端应该随时处理来自服务器端的数据。
在维基百科上引用相应的条目以供参考: 1)http://en.wikipedia.org/wiki/HTTP_persistent_connection 2)http://en.wikipedia.org/wiki/WebSocket
答案 1 :(得分:9)
您应该阅读COMET,这是一种显示HTTP Keep-Alive限制的设计模式。 Keep-Alive现在已超过12年,因此它不是HTTP的新功能。问题是它还不够;客户端和服务器无法以真正的异步方式进行通信。客户端必须始终使用“挂起”请求才能从服务器返回消息;服务器可能不会在任何时候向客户端发送消息。
答案 2 :(得分:3)
HTTP与Websockets
REST(HTTP)
如果......
,您可能错误地使用了HTTP<强>的WebSockets 强>
如果..
,您可能错误地使用了WebSockets