Javascript:每个客户端有两个连接?
作者:互联网
我正在开发一个实现longpolling的应用程序,因为我希望用户在收到通知后立即收到通知.我有这个部分工作,但我还需要使用javascript函数扩展它,每20秒向服务器发送一次’heartbeat’.
我的问题:如何在不完全中断代码20秒的情况下执行此操作(以便其他javascript在计数时仍然执行)并且是否有某种方法可以使用第二个连接?因为当心跳发送给用户时,我不希望我的longpolling被中断.
有任何想法吗?
解决方法:
您不需要为要实现的目标维护多个连接. Javascript的异步特性允许连接在处理其他事物时保持活跃.您可能认为javascript的XHR是阻塞的,因为它是单线程的.
由于事件循环模型,javascript中的XHR是非阻塞的 – javascript引擎经常处于循环中,检查已注册的调用是否已完成以及是否应该处理其回调.这允许其操作是非阻塞的,从而允许单个javascript应用程序处理多个XHR长轮询请求.
如果你能够为请求使用jQuery,它可以很好地使用此函数包装XHR:http://api.jquery.com/jQuery.ajax/.使用此功能,您可以定义20秒的超时并立即处理它(重新启动与服务器的连接).
旁白 – 您可能希望考虑使用服务器堆栈来优化长轮询.确保您的Web服务器不会为每个请求生成一个线程(如Apache 2.2) – 否则您将很快耗尽系统资源!如果您可以使用node.js(这对于处理许多同时请求非常有用),请将socket.io库作为服务器端和客户端解决方案(http://socket.io/#home).
标签:javascript,ajax,long-polling,multitasking,heartbeat 来源: https://codeday.me/bug/20190716/1481750.html