我使用Net :: SocketReactor關於proccess連接。當數據輸入插座稱爲如下代碼:Poco Websocket無法讀取大數據
int WebSocketWrapper::DoRecieve(void *buf) {
try{
int flags;
const auto size = m_sock.availabel();
const auto ret = m_sock.receiveFrame(buf, size, flags);
if (size != ret){
logger.warrning('Read less than available');
}
return ret;
}
catch (WebSocketException& exc){
logger.log(exc);
switch (exc.code()){
case pnet::WebSocket::WS_ERR_HANDSHAKE_UNSUPPORTED_VERSION:
logger.debug("unsuported version");
break;
// fallthrough
case pnet::WebSocket::WS_ERR_NO_HANDSHAKE:
case pnet::WebSocket::WS_ERR_HANDSHAKE_NO_VERSION:
case pnet::WebSocket::WS_ERR_HANDSHAKE_NO_KEY:
logger.debug("Bad request");
break;
}
}
return 0;
}
當數據大小小於1400字節時,它工作良好。 TCP包沒有碎片。但是當我嘗試發送超過1400字節的數據時,我有WebSocketException:「負載大小緩衝區不足」。我正在探索源代碼Poco :: Net :: Websocket他發現了衝突。當調用Websocket :: readFrame分析幀頭的大小,但我只有部分幀。我可以請求返回StreamSocket :: availabel。
如何從websocket讀取大量數據?
你是對的!作爲參數的指針是個壞主意。我試圖簡化代碼。 –
我是否正確理解我們應該忽略結果StreamSocket :: availabel(),並使用int WebSocket :: receiveFrame(Poco :: Buffer&buffer,int&flags)? –
是的,你理解它是正確的。但是,帶有'Poco :: Buffer'的版本尚未發佈;所以,除非你使用github開發代碼,你應該使用[固定緩衝區]的版本(https://github.com/pocoproject/poco/blob/poco-1.6.1/Net/src/WebSocket.cpp#L109 ),並確保爲預期的框架提供足夠的空間。 – Alex