我尝试在boost下通过websocket使服务器"消息"。目前,我经常可以从服务器发送大消息或一系列消息。当我点击"发送"时,它会发送大量数据。困难在于,当服务器在websocket消息中接收命令时,如"停止","暂停"…该命令将一直运行到前一条消息结束。我试图停止执行前面的命令。
我试图读取发送数据之间的缓冲区。但这行不通。我试着检查是否有一个接收订单与async_read_some。
I基于的例子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
你知道吗?我修改了我的代码几次,但我不能执行新的实时控制,因为它出现在最后..
谢谢
如果数据已经发送到网络适配器,那么您几乎无法更改数据包的顺序。当网络适配器到达它时,它将按照您设置的顺序发送数据包。
如果你想发送"高优先级"消息,那么不要一次性发送所有数据,而是将其保存在队列中等待设备接受更多数据,如果高优先级消息进来,在发送任何其他数据包之前发送它。
不要让数据包太小,但我想如果你一次制作几kb左右的数据包,它将非常迅速地工作,并且仍然允许对流进行良好的控制。
当然,这也要求接收方的理解"可能会有不同的"流"或"流"的信息,如果你发送一个"暂停"命令,这意味着以前发送的流不会收到任何直到简历发送"显然你需要调整这是所需的行为,但你需要一些方法不直接说"把‘停止’作为数据到其他流",但解释这是一个命令。
如果在服务器接收到所有数据之前,您在网络中以单个数据包的形式发送大消息,服务器接收到停止消息,您可能无法控制它,直到您完成接收数据。
最好实现优先级消息队列。从客户端和组装服务器发送小块消息,而不是单个大数据包。给像停止(取消)这样的消息包以高优先级。当在服务器端接收消息时,如果存在任何高优先级消息,如停止(取消),您不需要接受剩余的消息,您可以在服务器端关闭websocket连接。
阅读线程Chunking WebSocket Transmission获取更多信息
当您使用Boost时,您是否看过WebSocket++(基于Boost/ASIO)?