AJAX或Socket.在我的情况下,这更有意义
AJAX or Socket.IO make more sense in my situation?
我一直在使用AJAX做一些事情,有时每秒需要几个POST。每个post返回一个JSON对象(由PHP文件生成,约11,000字节),平均延迟在30ms和250ms之间,这取决于我是在wifi还是有线,但每大约1/15个调用它峰值高达约4000ms。我正试图找到一种方法来解决这个问题,因为现在我看到两个选项:
-
在AJAX调用上抛出一个超时,并让它在失败时调用GET (POST仍然应该通过,它的返回旅程总是超时)或…
-
把整个东西砍掉,学习node.js,这样我就可以使用websockets来纠正这个问题。
任何解决方案,据我所见是基于为什么原来的调用失败。如果AJAX调用出了问题,那么应该可以通过一个新的GET来解决问题。但如果是服务器本身的问题,那么逻辑上GET也会超时,这是服务器的问题,我就死在水里了。
因为我还没有使用websockets的经验,所以我希望能得到一些关于下一步采取的最佳行动的反馈。谢谢你的建议。
如果有帮助的话,我可以用一些狡猾的编码将返回的有效载荷减少到1/15的大小。这会产生影响吗?
WebSockets是一个很好的选择!实际上,使用SocketIO非常简单,学习曲线也很浅。
- 因为连接保持打开,您的请求跳过DNS查找和路由以降低延迟。这意味着您发出的每个POST请求的开销要低得多。 如果你曾经预见到将数据推送给你的用户,WebSockets就是实现它的事实上的方式。Ajax轮询已经过时了。
在探索Node之前,请考虑一下上面的缺点。我认为这是一项伟大的技术,但我也会研究一下以下方法,特别是如果你时间紧迫的话。
- 1/15的尺寸减少是完全值得的。实际上,这两种情况都是值得的。
- 您可以对来自客户端的POST请求进行任何类型的批处理吗?如果后续请求依赖于前一个POST请求的结果,则不能这样做。在这种情况下,我强烈建议使用WebSockets。
总而言之,总有权衡。如果你没有时间,考虑到Node和SocketIO和whirl,它们正在成为非常流行的web技术,值得学习。
用错误的工具做事是没有意义的。如果需要实时通信,请使用开箱即用的服务器,比如把整个东西砍掉,学习node.js,这样我就可以使用websockets来潜在地纠正这个问题。
node.js
(可能是最容易从PHP进入的服务器)。因为我还没有使用websockets的经验
在原始的websockets之上获得一些框架,如primus或socket。祝你好运!
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- 如何在有延迟的情况下对两个代码进行积分
- 有没有一种方法可以在没有文档或jQuery的情况下使用javascript解码html实体
- 为什么jQuery代码段在没有IFrame的情况下可以工作,而在有IFrame时却不能工作
- 如何检查html5视频是否有足够的缓冲,以便在不停止缓冲的情况下播放
- 有没有任何情况下,一个方法不应该是原型方法
- JavaScript while循环没有'不能在有条件的情况下工作
- 类型胁迫在有条件的情况下更危险吗?
- 有没有办法在没有真正的点击事件的情况下使用 onclick
- 在这种情况下,我应该如何在余烬中放置我的模型有很多关系
- 有没有一种方法可以在没有谷歌云控制台的情况下使用带有JavaScript的谷歌硬盘
- 在这种情况下,有什么方法可以向`.call()`发送更多的参数吗
- 在这个jQuery插件中,哪种策略更有意义
- 有没有更好的方法可以在不使用setInterval的情况下创建异步更新
- 有没有更好的方法可以在没有jQuery UI的情况下使用jQuery UI小部件工厂
- 在这种情况下,New有意义吗
- AJAX或Socket.在我的情况下,这更有意义
- 有没有办法让Angular.js在未定义的情况下变得更冗长?
- 是否有任何情况下,我必须使用.attr()超过.prop()
- JSON对象——哪个结构更有意义