0

我注意到一个即时通讯工具使用 javascript/http/xmlhttprequest 而不是 tcp/websocket 进行通信。

http://w.qq.com/login.html

我在 chrome 开发者工具中监控了它的通信方式。都是http请求。每分钟向服务器发出一个请求。

我感到困惑的是,如果我向 http 客户端发送消息,它会立即收到消息。

据我所知,http客户端无法从其他人那里获取消息,它必须发送请求并获得响应。

有没有办法让 http 客户端在不使用 tcp/socket 或发送请求并获得响应的情况下从其他人那里获取消息?

欢迎您的评论

4

1 回答 1

1

我没有得到所有这些亚洲象形文字,但它们可能使用长轮询:客户端向服务器询问新数据并且服务器在数据未准备好时保留答案(不发送任何内容,也不关闭连接)(新消息来了)或直到巨大的超时到期。一旦连接关闭,客户端就会处理响应并发送下一个长轮询请求。通过 http 进行“永久”连接的更常见术语称为Comet。如您所见,Comet 可以通过多种技术实现。至于我,最现代的是 ajax 流。它当然需要现代浏览器,但值得。自己实现流式传输并不难,但我相信很少有 js 库可以为您完成这项工作。

更新: 这里有很好的解释代码源

是关于 SO 上流式传输的众多问题之一(我猜底部的答案是最有趣的)

于 2013-10-05T07:40:25.130 回答