我試圖創建一個WebSocket服務器。POCO WebSocket - 從另一個類發送數據
我可以建立一個連接,一切工作正常。
在this GitHub示例數據在客戶端連接時調用的handleRequest()
方法內發送。
但我可以使用建立的WebSocket連接從另一個類發送數據給客戶端嗎?
我該如何實現這一目標?這甚至有可能嗎?
謝謝。
我試圖創建一個WebSocket服務器。POCO 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的指針e工廠(與RequestHandler
不同,它會持續很長時間,它會隨着每一個請求而來)。請記住,處理程序在其自己的線程中執行,因此您應該有某種鎖定或通知機制來指示何時WebSocket實際上已由處理程序創建(在成功創建WebSocket之後,_pWebSocket
的布爾變量將爲true)。
上面的例子只說明瞭單個WebSocket的情況 - 如果你想有多個,你應該有一個數組或指針向量,並根據需要添加/刪除它們。在任何情況下,WebSocket指針都不一定駐留在工廠中 - 您可以(a)將它們放在應用程序的其他地方並傳播給工廠/處理程序或(b)擁有全局工具線程訪問機制)持有WebSocket(s)。
你需要比「它不工作」更具體。 – molbdnilo