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

POCO WebSocket - sending data from another class

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

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

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

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

我该如何存档?这甚至可能吗?

谢谢。

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

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 时发出信号(_pWebSocket 的 bool cast 将在 WebSocket 成功创建后为真已创建)。

以上示例仅说明了单个 WebSocket 的情况 - 如果您想要多个 WebSocket,您应该有一个指针数组或向量,并根据需要 add/remove 它们。在任何情况下,WebSocket 指针不一定位于工厂中 - 您可以 (a) 将它们放在应用程序的其他位置并将它们传播到 factory/handler 或 (b) 具有全局设施(与适当的多线程访问机制)持有 WebSocket。