WebSockets:用于减少开销是否有用?

8

我正在构建一个动态搜索功能(每次按键都会更新):我的当前方案是,在每次按键时向服务器发送新的AJAX请求,并以JSON格式获取数据。

我考虑为每个搜索“会话”打开一个WebSocket,以节省一些开销。我知道这样做可以节省时间,但问题是,考虑到以下参数,这样做真的值得吗:

  • 80ms平均ping时间
  • 166ms:假设用户输入相对较快时每个按键之间的时间
  • 最坏情况下传输速率为1MB/s,每个按键必须接收的数据包不超过1KB。
  • 该应用还需要大约30-40ms的时间将搜索结果与DOM组合。

我找到了这篇文章:HTTP vs Websockets with respect to overhead,但那是一个不同的用例。

Websockets除了纯HTTP开销外,还能减少什么? HTTP开销有多少(假设没有cookie和最小标头)?

我猜HTTP请求在每个请求上都会打开一个新的网络套接字,而WebSocket允许我们始终只使用一个网络套接字。如果我的理解正确,那么打开一个新的网络套接字的实际开销是多少?


4
当服务器向客户端推送消息时,使用WebSockets是值得的。 - Raynos
我之前做过类似的事情,发现为了加快速度,你可能想要延迟几毫秒的Ajax请求,然后如果用户输入另一个键,则取消它。然后,如果用户输入速度很快,您只需进行一次请求即可(虽然这实际上并没有回答您关于WebSockets的问题!)。 - Mark Rhodes
这就是我现在正在做的事情。它运行得非常顺畅,但我担心当我部署它时,应用程序可能会在较慢的ping时间下开始出现问题。 请查看实际的应用程序:http://77.70.33.151:8233/ 您可以搜索类似“firefox”、“chromium”或“mozilla”的内容。 - Ivo
HTTP请求在每个请求上不会打开一个新的网络套接字。 - Julian Reschke
1个回答

3
似乎WebSockets在类似于您的情况下提供更好的性能。 Web Socked
  • 小握手标头
  • 在握手之后进行全双工通信。
  • 连接建立后,每个传输的请求/响应只添加2个字节
Http
  • 每个请求都会发送Http标头
另一方面,WebSocket是一项相对较新的技术。智能调查网络浏览器支持潜在的网络问题。 参考资料:

http://websocket.org/quantum.html

http://www.youtube.com/watch?v=Z897fkPn7Rw

http://en.wikipedia.org/wiki/WebSocket#Browser_support


谢谢,这个视频详细回答了我的问题(HTTP 的纯开销)。 至于浏览器支持,实现备用机制或使用库(例如 socket.io)并不难。 - Ivo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接