即时通讯使用http而不是tcp / websocket进行通信

时间:2013-10-05 07:31:45

标签: javascript

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

,例如http://w.qq.com/login.html

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

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

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

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

您的评论欢迎

1 个答案:

答案 0 :(得分:1)

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

UPD: Here对代码源

的解释非常好

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