2012-08-22 3 views
4

저는 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의 버그 또는 뭔가를 내 스크립트가 잘못 되었나요?

답변

3

개발 도구 (F12)에서 을 돌리면 모든 것이 IE에서 올바르게 작동합니다.

전혀 미치지 않습니다. Internet Explorer에는 개발 도구를 열 때까지 console 개체가 없습니다 (console.log은 코드를 차단하는 예외를 throw합니다). 모든 console.log 줄을 제거하고 작동하는지 확인하십시오. 스크립트를 디버그하려면 사용자 정의 디버깅 도구를 작성해야합니다. 다음은 간단한 예입니다.

window.debug = function() { 
    if (window.console && window.console.log) { 
     window.console.log.apply(window.console, arguments); 
    } 
} 
debug("JSON-parse error!"); 

알려 주시면 알려드립니다.

+0

나는 어떤 종류의 디버깅 메커니즘을 구현하고 싶었지만 몇 가지 테스트를 먼저하고 싶었습니다 ... 이것은 연기 작업의 결과 인 것 같습니다. 고맙습니다. 문제가 해결되었습니다! – lukew

관련 문제