我想随时发send
条消息。但是,我不知道将send()
放在哪里。我实际上不知道在调用run()
之后会发生什么,但是在处理程序内部却不知道。
我当前的设置只是send
到on_open
中的消息,因为那是我唯一可以放置send
使其生效的地方。但是,以这种方式发送多个消息被证明是一个问题。我可以关闭来自on_message
的连接,但是无论我再次send
还是connect
,都无法通过该客户端再次run()
。
理想的解决方案是不必close
并重新打开连接或端点。同样,我想知道如果不在send
或on_open
on_message
放在哪里
c.init_asio();
c.start_perpetual();//I've tried both perpetual and non-perpetual
//[associate handlers]
c.connect(con); //connecting and running works fine;
c.run(); //on_open, on_message work fine
sleep(15); //is 15 seconds enough for the asio to clean up everything?
c.connect(con); //any permutation of these two lines
c.run(); //do nothing after close() has been called
std::string test("test");
con->send(test,websocketpp::frame::opcode::TEXT); //this does nothing
使用C ++ 11和VS2015。我也无法复制/粘贴代码,因此我可能错过了一些愚蠢的错字。不确定要说什么。我不知道可以将send
放在哪里,以便例如可以在按下按钮时将其发送到
答案 0 :(得分:0)
将WebSocket ++与基于Asio的传输一起使用时,
# This method will return the data of emploies
def get(self, request):
employee = employees.objects.all()
serializer = employeesSerializer(employee, many=True)
return Response(serializer.data)
方法只是Asio的endpoint::run
的便捷包装。如果您需要很多细节,Asio有大量文档介绍了该方法的工作原理。
简而言之,io_service.run()
在执行基于事件的网络I / O循环时将无限期阻塞,并且在连接完成之前不会返回。
可以通过响应各种处理程序,从该事件循环中完成发送消息。如您所述,您可以从打开的处理程序发送消息。另一个发送消息的常用处理程序是消息处理程序,它使您可以答复远程端点发送的任何消息。如果要独立于网络事件(打开,收到消息等)发送消息,则可以使用中断处理程序(尽快触发新事件)或计时器处理程序(一段时间后触发新事件)或进行设置一个在需要时发送消息的线程。
捆绑的run
示例演示了计时器方法,而telemetry_server
示例演示了线程方法。