非常に奇妙な問題があります。私は開いている WebSocket を持っています。通信は完全に機能します。上記の接続を介してサーバーに通知する、ウィンドウの onblur および onfocus イベントもあります。ただし、その場合、受け取る文字列は null で終了していません。それ以外の場合、それぞれのぼかし/フォーカスイベントで送信されるのと同じ文字列を送信する場合でも、通信は完全に完璧に機能します。それはなぜですか、どうすれば修正できますか?
ここにいくつかのコードがあります:
$(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');
}
}
そして、イベントが発生したときに受け取る null で終わらない文字列の例を次に示します。
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 でのみ発生します。同じ WebSocket プロトコルを使用する Firefox で確認したところ、すべて問題なく動作しました。