gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:30:50 27 4
gpt4 key购买 nike

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

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

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

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

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

谢谢。

最佳答案

当然,这是可能的。在您提到的示例中,您应该在 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,您应该有一个指针数组或 vector ,并根据需要添加/删除它们。在任何情况下,WebSocket 指针不一定位于工厂中 - 您可以 (a) 将它们放在应用程序的其他位置并将它们传播到工厂/处理程序或 (b) 具有全局设施(具有适当的多-线程访问机制)持有 WebSocket。

关于c++ - POCO WebSocket - 从另一个类发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35796164/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com