我有一個很奇怪的問題。我有一個開放的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