我有一个非常奇怪的问题。我有一个开放的 WebSocket,通信完美。我还有窗口的 onblur 和 onfocus 事件,它们通过所述连接通知服务器。但是,在这种情况下,我收到的字符串是非空终止的。否则,即使发送在那些相应的模糊/焦点事件上发送的相同字符串,通信也绝对无可挑剔。为什么会这样,如何解决?
这是一些代码:
$(document).ready(function(){
initializeEverything();
window.onblur = function(){ notifyFocusChange(false); };
window.onfocus = function(){ notifyFocusChange(true); };
});
function notifyFocusChange(present){
if(present){
webSocket.send('presence:present');
}else{
webSocket.send('presence:absent');
}
}
这是事件触发时我收到的非空终止字符串的示例:
presence:absentÏ┘ê÷/à°äJ÷ÝÿLÓ▓ùM÷Ýÿ[
编辑:有人建议这可能是服务器错误,所以这里是解码传入消息的代码:
private function decode($payload) {
$length = ord($payload[1]) & 127;
if ($length == 126) {
$masks = substr($payload, 4, 4);
$data = substr($payload, 8);
} elseif ($length == 127) {
$masks = substr($payload, 10, 4);
$data = substr($payload, 14);
} else {
$masks = substr($payload, 2, 4);
$data = substr($payload, 6);
}
$text = '';
for ($i = 0; $i < strlen($data); ++$i) {
$text .= $data[$i] ^ $masks[$i % 4];
}
return $text;
}
编辑:它只发生在 Chrome 中。我在 Firefox 上检查了它,它使用相同的 WebSocket 协议,在那里一切正常。