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。
我正在尝试创建一个 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。