1

我正在设置一个像网页一样的股票代码,用 JavaScript 编写。我还在用 C++ 编写页面与之对话的服务器。

我想让网页高效,这样它就可以向应用服务器发送单个订阅消息,然后保持一个保持活动连接打开,不断接收从应用服务器推送的入站数据。

目前,每次从服务器接收数据时,我都必须重新发出网络客户端的订阅调用。问题是每次 XHR 对象点击 readyState(4) 时,调用就有效地完成了。在此之后到达网页的任何数据都将被忽略。Web 客户端可以重新发送数据并重置对象,但发送是不必要的,仅用于重置 XHR 对象。

我想知道是否有可能以某种方式重置现有的 XHR 对象,并将其置于期望更多入站数据的状态,以便当更多数据推送到网页时,网页会响应并处理它。

提前感谢您提供的任何帮助。注意:不在这个项目上使用 JQuery。

4

2 回答 2

1

我强烈建议研究 Websockets,尤其是像socket.io 这样的库,它将各种浏览器的 Websocket 传输实现封装到一个 API(WS、JSON、JSONP、Flash 和 Long Polling)中。

现在所有主流浏览器都应该支持 Socket.io 客户端库。您唯一的挑战可能是找到特定于 C++ 的服务器实现。希望这个SO 问题可能会有所帮助

否则,您唯一的其他选择是在客户端上进行长轮询或彗星,并使用可扩展的合适的服务器端实现(即类似于 NginX 之类的事件驱动服务器,而不是每个连接的线程架构。)

我非常感谢您致力于 C++,但我谦虚的建议是尽可能地研究 Node.js,并且确实提供了一个非常高效的解决方案,而且只需很少的努力。

HTH 一切顺利。

于 2012-12-17T14:09:14.577 回答
1

HTTP 是一次性协议:一个请求,一个响应,然后就完成了。如果要保持连接打开,可以使用 Websockets(MDN 参考页面客户端代码示例)。但是考虑到旧浏览器不支持它(例如,IE,刚刚在版本 10 上开始支持 Websockets),因此您可能需要使用 XHR 和long-polling实现回退。

于 2012-12-17T14:10:09.750 回答