2013-06-04 136 views
0

我尝试通过websocket在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

的例子

我你有什么想法?我返工我的代码几次,但因为它出现在最后,我不能执行新的实时控制..

谢谢

+0

我找到一个解决方案,在每次分析新缓冲区时启动的线程中创建一个函数。 – user2451636

回答

0

如果数据已经被发送到网络适配器,有很你可以做些什么来改变数据包的顺序。网络适​​配器会按照您排队的顺序发送数据包。

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

不要使数据包太小,但我想如果你一次创建几千字节的数据包,它将会很快地工作,并且仍然可以很好地控制数据流。当然,这也需要接收者理解“可能有不同的'流'或'流'信息,并且如果你发送'暂停'命令,这意味着先前发送的流在发送“简历”之前不会收到任何内容,“显然根据需要调整这一点,以满足您所需的行为,但是您确实需要某种方式来不只是说”将'停止'作为数据放入流程的其余部分“,而是将其解释为命令。

+0

谢谢。我的方法与您提供的类似。 目前,我通过这些消息将我的数据分成几个部分。我试图在每次发送消息之间没有成功,以测试是否有像“停止”这样的消息来启动完成发送其余数据的功能。 我尝试执行捕获缓冲区并阅读以查看是否存在同时收到一条新消息。 它不起作用。但是,接收到下面的命令,但是到达 另一方面,我得到包含命令的消息,另一方面,我运行这些命令并通过消息发送答案。 – user2451636

0

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

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

阅读线程Chunking WebSocket Transmission欲了解更多信息。

+0

您好, 谢谢。 我的代码考虑了消息和优先级的大小,但问题是我无法在两个程序之间捕获新消息。每个收据都会检查收到的消息,并确定消息中的命令(和函数),但是在“发送”期间,而不是它是否接收到新消息。 – user2451636

0

当你使用Boost时,你看过WebSocket++(基于Boost/ASIO)吗?

+0

你好, 我想随后使用websocket ++,但它会花费我更多的时间,我不知道它对我有帮助。我后来用线程找到了解决方案。 谢谢 – user2451636