我的websocket有问题。 我最近将服务器从PHP切换到了c ++端,并使用了POCO库,我使用了这个脚本: WebSocketServer.cpp
对于c ++中的一个客户端,我使用了一个在stackoverflow上找到的snipet: WebSocketClient.cpp
我稍微修改了客户端,首先它在连接到服务器后立即发送默认消息。
我用我的主应用程序中的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 ++应用程序的日志会发送连接消息并收回它,但我没有收到来自js-client的消息:
[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);
代码有什么问题吗?
答案 0 :(得分:0)
我不是重现环境的情况,但我在使用Python和IOS网络套接字时遇到了类似的问题。我们使用的所有其他技术都完美地使用Python套接字,但IOS Web套接字存在问题。多天后,我们发现IOS Web套接字不会发送Python可以处理的通信程序(EOM)。所以我们不得不处理不同的IOS套接字。
我检查了WebSocket标志81,因此文本和框架已完成。但我建议您从浏览器的开发人员工具中查看,以查看通过网络选项卡通过套接字连接收到的内容。
我可能是javascript WebSocket无法理解消息结束的问题。如果您在开发人员工具上看到数据问候,则可以轻松处理情况。但是,如果您没有看到任何消息,则问题很可能来自C ++代码。
在附件中,您可以看到Chrome如何显示套接字数据交易。请记住,单击左侧列表中的连接将更新它们不存在的事务。
希望这可以帮助你。
如果没有更深入地使用tcpdump或类似的sowftware来确定它们是否真的是由双方发送并获得。