我有一个很奇怪的问题。我有一个开放的WebSocket,沟通工作完美。我也有窗口的onblur和onfocus事件,通过所述连接通知服务器。但是,在这种情况下,我收到的字符串是非空终止的。除此之外,即使在发送相应的模糊/焦点事件发送的字符串时,通信的工作也是完全无懈可击的。为什么是这样,它如何解决?JavaScript WebSocket非空终止的字符串
下面是一些代码:
$(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;
}
编辑:它只发生在铬。我在Firefox上检查了它,它使用相同的WebSocket协议,并且在那里一切正常。
看起来像服务器错误。什么是服务器? –
PHP。但是,当我将它发送到onblur/onfocus事件之外时,这条消息始终是正确的。 – arik