【发布时间】:2015-03-03 08:38:31
【问题描述】:
我的 websocket 有问题。 我最近将我的服务器从 PHP 切换到 C++ 端,并使用了 POCO 库,我完全使用了这个脚本: WebSocketServer.cpp
对于 C++ 中的一个客户端,我使用了我在 stackoverflow 上找到的片段: WebSocketClient.cpp
我稍微修改了客户端,首先它会在我连接到服务器后立即发送一条默认消息。
我用我的主应用程序中的更新功能包装了整个事情,我可以不断地接收消息:
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++ 应用程序的日志确实会发送连接消息并将其接收回来,但我没有从 js-client 收到消息:
[Websocket] Connecting to websocket.
[Websocket] Send: hello
[Websocket] Recv: hello
为什么会这样? 不是sn-p形式的servercode直接将消息发送回所有客户端吗?
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);
代码有什么问题吗?
【问题讨论】:
标签: c++ websocket poco server broadcast