POCO WebSocket - 从另一个类发送数据

时间:2016-03-04 12:31:52

标签: c++ websocket poco-libraries

我正在尝试创建一个WebSocket服务器。

我可以建立连接,到目前为止一切正常。

this GitHub示例中,数据在客户端连接时调用的handleRequest()方法中发送。

但是我可以使用已建立的WebSocket连接从另一个类向客户端发送数据吗?

我怎样才能达到这个目的?这甚至可能吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

当然,这是可能的。在您引用的示例中,您应该在WebSocket中有一个指向RequestHandlerFactory的成员指针,例如:

class RequestHandlerFactory: public HTTPRequestHandlerFactory
{
//...
private:
  shared_ptr<WebSocket> _pwebSocket;
};

将其传递给WebSocketRequestHandler constructor

return new WebSocketRequestHandler(_pwebSocket);

WebSocketRequestHandler应如下所示:

class WebSocketRequestHandler: public HTTPRequestHandler
{
public:
  WebSocketRequestHandler(shared_ptr<WebSocket> pWebSocket) :_pWebSocket(pWebSocket)
  {}
  void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response)
  {
    // ...
    _pWebSocket.reset(make_shared<WebSocket>(request, response));
    // ...
  }
private:
  shared_ptr<WebSocket> _pWebSocket;
}

现在,在请求处理程序创建它之后,您将拥有一个指向工厂中WebSocket的指针(与RequestHandler不同,它是长期存在的,它随着每个请求而消失)。请记住,处理程序在其自己的线程中执行,因此您应该使用某种锁定或通知机制来指示WebSocket实际上是由处理程序创建的(在{1}}的bool强制转换成功后,WebSocket成功创建)。

上面的例子只说明了单个WebSocket的情况 - 如果你想拥有多个WebSocket,你应该有一个数组或指针向量,并根据需要添加/删除它们。在任何情况下,WebSocket指针都不一定需要驻留在工厂中 - 您可以(a)将它们放在应用程序的其他位置并将它们传播到工厂/处理程序或(b)具有全局功能(具有适当的多功能) -thread-access机制)持有WebSocket。