我有一个websocket的问题。我最近从PHP转向c++端,并使用了POCO库,我精确地使用了这个脚本:
WebSocketServer.cpp
对于在c++中的单个客户端,我使用了我在stackoverflow上找到的代码片段:
WebSocketClient.cpp
我修改了客户端,首先它会在连接到服务器时发送一个默认消息。
我将整个代码包装到我的主应用程序的Update函数中,以便我能够不断接收消息。
为什么会发生这种情况?难道服务端代码中的片段不是直接将消息发送回所有客户端吗?
代码有错误吗?
我将整个代码包装到我的主应用程序的Update函数中,以便我能够不断接收消息。
void CLeagueStats :: Update( ) {
if(m_Connected) {
string msg = Recv( );
if(msg != "") {
//handleIncomingMsg( msg );
}
} else if(GetTime() - LastReconnectTime > 90 || LastReconnectTime == 0) {
Connect( );
}
}
string CLeagueStats :: Recv( ) {
char receiveBuff[256];
int flags=0;
int rlen=m_psock->receiveFrame(receiveBuff,256,flags);
CONSOLE_Print("Recv: "+string(receiveBuff));
return string(receiveBuff);
}
我现在已经编写了一个完全简单的javascript客户端,它会在页面加载时初始化:
<script type="text/javascript">
var ip_port = 'localhost:9980';
var ohc;
if (typeof (MozWebSocket) == 'function')
ohc = new MozWebSocket('ws://' + ip_port);
else
ohc = new WebSocket('ws://' + ip_port);
var self = this;
setTimeout(function() {
self.ohc.send("hey");
}, 500);
</script>
服务器日志中包含以下两条信息:
C++ 应用: WebSocket 连接已建立。帧接收成功(长度为5,标志为0x81)。
Javascript: WebSocket 连接已建立。帧接收成功(长度为3,标志为0x81)。
但是从 C++ 应用的日志中可以看到连接消息已被发送并接收成功,但是我没有收到来自 JavaScript 客户端的消息:
[Websocket] Connecting to websocket.
[Websocket] Send: hello
[Websocket] Recv: hello
为什么会发生这种情况?难道服务端代码中的片段不是直接将消息发送回所有客户端吗?
n = ws.receiveFrame(buffer, sizeof(buffer), flags);
app.logger().information(Poco::format("Frame received (length=%d, flags=0x%x).", n,unsigned(flags)));
ws.sendFrame(buffer, n, flags);
代码有错误吗?