2016-03-04 210 views
1

我試圖創建一個WebSocket服務器。POCO WebSocket - 從另一個類發送數據

我可以建立一個連接,一切工作正常。

this GitHub示例數據在客戶端連接時調用的handleRequest()方法內發送。

但我可以使用建立的WebSocket連接從另一個類發送數據給客戶端嗎?

我該如何實現這一目標?這甚至有可能嗎?

謝謝。

+0

你需要比「它不工作」更具體。 – molbdnilo

回答

1

這當然是可能的。在你提到的例子中,你應該在RequestHandlerFactory成員指針WebSocket,例如:

class RequestHandlerFactory: public HTTPRequestHandlerFactory 
{ 
//... 
private: 
    shared_ptr<WebSocket> _pwebSocket; 
}; 

它傳遞到WebSocketRequestHandlerconstructor

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)。

+0

這正是我所需要的。謝謝! – daB0bby

+0

對於(b),一個「適當的多線程訪問機制」是什麼樣的?只需鎖定'sendFrame()'? – daB0bby

+0

取決於你的申請,其中我不知道給出有效的建議。 – Alex

相關問題