Websocket和消息的接收

时间:2013-06-04 12:26:40

标签: c++ boost websocket boost-asio

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

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

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

你知道吗?我重复了几次我的代码但是我无法执行最终出现的新实时控件..

谢谢

3 个答案:

答案 0 :(得分:0)

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

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

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

当然,这也要求接收者理解“可能存在不同的'流'或'流'信息,如果你发送'pause'命令,则意味着先前发送的流是在发送'resume'之前不会收到任何东西“显然需要根据你需要的行为进行调整,但你确实需要一些方法来不仅仅说”将'STOP'作为数据放入流程的其余部分“,但是解释它作为一个命令。

答案 1 :(得分:0)

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

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

阅读帖子Chunking WebSocket Transmission了解更多信息。

答案 2 :(得分:0)

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