我正在尝试创建一个WebSocket服务器。
我可以建立连接,到目前为止一切正常。
在this GitHub示例中,数据在客户端连接时调用的handleRequest()
方法中发送。
但是我可以使用已建立的WebSocket连接从另一个类向客户端发送数据吗?
我怎样才能达到这个目的?这甚至可能吗?
谢谢。
答案 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。