我的 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++ App: WebSocket connection established. Frame received (length=5, flags=0x81).
Javascript: WebSocket connection established. Frame received (length=3, flags=0x81).
但来自 C++ 应用程序的日志确实发送了连接消息并收到了它,但我没有从 js 客户端收到消息:
[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);
代码有问题吗?
最佳答案
我无法重现环境,但我在使用 Python 和 IOS 网络套接字时遇到了类似的问题。我们使用的所有其他技术都可以完美地与 Python 套接字配合使用,但 IOS 网络套接字有问题。许多天后,我们发现 IOS web socket 不发送 Python 可以处理的通信端(EOM)。所以我们必须以不同的方式处理不同的 IOS 套接字。
我已经检查了 WebSocket 标志 81,所以它是文本并且框架已完成。但我建议您从浏览器的开发人员工具中查看从“网络”选项卡通过套接字连接收到的内容。
我可能是 javascript WebSocket 不理解消息结束的问题。如果您在开发人员工具上看到数据问候,那么就很容易处理这种情况。但是,如果您没有看到任何消息,那么问题很可能来自 C++ 代码。
在附件中,您可以看到 Chrome 如何显示套接字数据交易。请记住,单击左侧列表中的连接将更新它们不活跃的交易。
希望对您有所帮助。
如果不深入使用 tcpdump 或类似的软件来确定它们是否真的由双方发送和接收。
关于c++ - Websocket 广播不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27785785/