저는 NodeJS와 Socket.IO를 사용하여 제 서버와 클라이언트 사이의 지속적인 연결을 구현합니다. Socket.IO 서버 자체는 들어오는 메시지를 처리하는 다른 PHP 서버에 연결하여 결과를 NodeJS에 다시 보냅니다. 거기에서 메시지가 조금 수정되어 클라이언트로 다시 전송됩니다.IE에서 XHR 폴링을 사용하는 Socket.IO
지금까지 모든 것이 잘 작동합니다. Chrome, Firefox 및 Opera는 기본 웹 소켓을 사용하며 모든 메시지가 올바르게 수신됩니다.
그러나 인터넷 익스플로러와 Iceweasel은 조금 이상한 동작을하는 XHR 폴링 폴백을 사용하고 있습니다. 클라이언트는 정확히 두 개의 메시지를 수신하고,이 후에 클라이언트는 서버로 메시지를 보낼 수 있지만 메시지는 다시 보내지 않습니다. 클라이언트. XHR 클라이언트에서 보낸 메시지는 올바르게 수신되고 처리됩니다. 웹 소켓 클라이언트가 메시지를 보내 게됩니다. XHR 클라이언트에 의해 수신
debug: clearing poll timeout
debug: xhr-polling writing 5:::{"message":"..."}
debug: set close timeout for client VjrHOXHjjg76bD_qx46C
debug: setting request GET /socket.io/1/xhr-polling/VjrHOXHjjg76bD_qx46C?t=1345663246573
debug: setting poll timeout
debug: clearing poll timeout
debug: xhr-polling writing �262�5:::{"message":"another message ..."}�200�5:::{"message":"message #3 ..."}
debug: set close timeout for client VjrHOXHjjg76bD_qx46C
debug: discarding transport
debug: cleared close timeout for client VjrHOXHjjg76bD_qx46C
첫번째 메시지 (2 로그 행 번호), 아직 7 사라질 한계선에 해당 메시지 :
Socket.IO에서 로그 레벨 3을 사용하여 I는 다음과 같은 결과를 얻는다. 또한 # 7 줄의 특수 문자를 발견했지만 버그에 책임이 있는지 알지 못합니다. 서버에 메시지를 보낼 때
는, 디버그 출력은 :이 메시지는 아직 연결된 모든 웹 소켓 클라이언트가 수신의 XHR-클라이언트로 전송되지 않습니다
debug - xhr-polling received data packet 5:::{"message":"input by the client"}
.
개발 도구 (F12)를 켜면 모든 것이 IE에서 정상적으로 작동합니다.
는 PHP 서버 자체에 연결하는 NodeJS 클라이언트합니다 (simpletcp 라이브러리 사용) 매우 간단합니다 :
// Client is the simpletcp-client
client.on("data", function(data) {
var msgData;
try {
msgData = JSON.parse(data.toString("utf8"));
} catch(e) {
console.log("JSON-parse error!");
return;
}
var socket = getsock(msgData.sid); // msgData.sid is the socket.id to identify the socket
if(socket == null) {
console.log("Client not found!");
return;
}
socket.emit("message", { "message" : msgData.message });
});
내가 지금 부탁 해요 것은 - 이것은 Socket.IO의 버그 또는 뭔가를 내 스크립트가 잘못 되었나요?
나는 어떤 종류의 디버깅 메커니즘을 구현하고 싶었지만 몇 가지 테스트를 먼저하고 싶었습니다 ... 이것은 연기 작업의 결과 인 것 같습니다. 고맙습니다. 문제가 해결되었습니다! – lukew