0

我尝试在 boost 下通过 websocket 制作服务器“消息”。目前,我经常可以从服务器发送大量消息或一系列消息。当我点击“发送”时,它会发送大量数据。困难在于,当服务器在 websocket 消息中接收到诸如“停止”、“暂停”之类的命令时,该命令会一直运行到上一条消息结束。我尝试停止执行上一个命令。

我试图在发送数据之间读取缓冲区。但它不起作用。我尝试检查是否有一个接收带有 async_read_some 的订单。

我基于 http://www.codeproject.com/Articles/443660/Building-a-basic-HTML5-client-server-application 和 HTTP server boost http://www.boost.org/doc/libs的例子/1_53_0/doc/html/boost_asio/examples.html

你有什么主意吗?我多次修改了我的代码,但我无法执行新的实时控件,因为它出现在最后..

谢谢你

4

3 回答 3

0

如果您在服务器收到所有数据时将大型消息作为单个数据包在网络中发送,则服务器收到停止消息时,您可能无法控制它,直到您完成接收数据。

最好实现优先级消息队列。从客户端发送消息作为小块并组装服务器而不是单个大数据包。给予像停止(取消)高优先级的消息包。在服务器端接收消息时,如果存在诸如停止(取消)之类的高优先级消息,则不需要接受剩余消息,您可以关闭服务器上的 websocket 连接。

阅读线程分块 WebSocket 传输以获取更多信息。

于 2013-06-04T13:36:38.063 回答
0

当您使用 Boost 时,您是否看过WebSocket++(基于 Boost/ASIO)?

于 2013-06-08T09:25:41.097 回答
0

如果数据已经发送到网络适配器,您几乎无法更改数据包的顺序。网络适​​配器将在数据包到达时发送数据包,按照您将它们排队的顺序。

如果您希望能够发送“更高优先级”的消息,那么不要一次性发送所有数据,而是将其放在队列中等待设备接受更多数据,如果有高优先级消息进来,在发送任何其他数据包之前发送。

不要让数据包太小,但我想如果你一次制作几千字节左右的数据包,它会很快工作并且仍然可以很好地控制流量。

当然,这也需要接收方理解“信息可能有不同的‘流’或‘流’,如果你发送‘暂停’命令,就意味着之前发送的流不会在发送 'resume' 之前接收任何内容”显然根据您需要的行为进行调整,但您确实需要一些方法来不仅仅是说“将 'STOP' 作为数据放入流程的其余部分”,而是将其解释为命令。

于 2013-06-04T12:54:48.527 回答