매우 이상한 문제가 있습니다. 나는 열린 WebSocket을 가지고 있으며, 통신은 완벽하게 작동합니다. 나는 또한 창에 대한 onblur 및 onfocus 이벤트를 가지고 있는데,이 이벤트는 연결을 통해 서버에 알립니다. 그러나이 경우 수신하는 문자열은 null이 아닌 종료 문자입니다. 커뮤니케이션은 그 각각의 흐림/포커스 이벤트에서 보내지는 동일한 문자열을 전송할 때조차도 완벽하게 결점없이 작동합니다. 왜 그런가요? 어떻게 고칠 수 있습니까? 여기 JavaScript WebSocket 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÷Ýÿ[
편집 : 그것은 제안 된의 IT 그 서버 오류 일 수 있으므로 수신 메시지를 디코딩하는 코드는 다음과 같습니다.
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-protocol을 사용하는 Firefox에서 확인했는데 모든 것이 완벽하게 작동합니다.
서버 오류처럼 보입니다. 서버는 무엇입니까? –
PHP. 그러나 onblur/onfocus 이벤트 외부로 보낼 때는 항상 메시지가 올바르게 표시됩니다. – arik