2011-12-12 3 views
5

나는 Node.js와 Socket.io의 진정한 초보자입니다.이 바보 같은 질문이 있으면 저와 함께하시기 바랍니다.Safari와 Chrome에서 Socket.io 연결이 느려지는 이유

나는 Heroku에서 Socket.io를 테스트하기 위해 매우 기본적인 더미를 설정했습니다. 버튼을 클릭하기 만하면 모든 연결된 브라우저가 그에 따라 메시지를 볼 수 있습니다. 이것은 서버가 로컬에서 실행될 때 매우 잘 작동했습니다. 이제 Heroku에서 Safari와 Chrome의 연결 문제를 봅니다. 초기 연결은 약 10 초 동안 지연되고, io.connect('http://myapp.heroku.com/')의 첫 번째 호출에서 503 오류가 발생합니다.

Firefox와 Internet Explorer에서는 거의 즉각적인 연결로 작동합니다. 이 문제가 발생할 수 있습니다 무엇에 http://sprain.ch/socketio/

모든 아이디어를 어떻게 그것을 해결하기 위해 :

현재 행동에 응용 프로그램을 볼 수 있습니까?

+0

나는 파이어 폭스에서도 동작을 재현 할 수있다. 처음 두 번의 호출은 빠르게 돌아 오지만 세 번째 이후에는 서버가 20 초 이상 응답하는 것처럼 보입니다. http://bit.ly/rtGkCD – SuitedSloth

+0

Firefox에서는 재생산하지 않았지만 Chrome에서는 재생했습니다. 이상하게 보입니다. 아마도 헤로 쿠 등의 문제 일 수도 있습니다. @sprain Socket.IO의 어떤 버전을 사용하고 있으며 어떤 전송 기능이 활성화되어 있습니까? – alessioalex

+0

나는 Socket.io 0.7을 사용한다. – sprain

답변

3

몇 가지 : http://devcenter.heroku.com/articles/using-socket-io-with-node-js-on-heroku

  • 단순히 "io.connect는()"대신 시도하는 URL을 수동으로 지정하려고 :

    • 내가 좋을 것 당신은이 설정을 사용합니다. SocketIO에는 그 호스트가 무엇인지에 관계없이 localhost와 통신하기위한 매우 견고한 기본 제공 검색 메커니즘이 있습니다.

    • Heroku + Socket.IO (경험적으로 말하면)에 대해 본질적으로 느린 것은 없으므로 코드에 다른 것이 있다고 생각합니다. 좀 더 공유 할 수 있다면 진단하기가 더 쉽습니다. 또한

    FWIW 당신은 ​​단순히 링크 해당 페이지는 말한다 텍스트가 "나를 klick를!" 버튼이 없습니다.

  • +0

    heroku에서 실행될 때 서버에 socket.io를 구성하는 것이 해결책이었습니다. 감사!. –

    7

    "connect timeout"매개 변수 (기본적으로 10 초)를 사용하여 첫 번째 websocket 연결에 사용되는 시간 제한을 줄일 수 있습니다.

    다음을 사용하여 1 초 타임 아웃을 감소 시도 할 수 있습니다 : 그들은 WebSocket을 지원하지 않기 때문에

    io.connect('http://myapp.heroku.com/',{'connect timeout': 1000}); 
    
    4

    그것입니다. 따라서 socket.io는 XHR 폴링을 사용하기 전에 웹 소켓을 사용하려고 시간을 초과합니다.이 폴링은 동일하지는 않지만 목적에 맞게 (?) 사용할 수 있습니다. WebSocket을을 사용하여

    io.configure(function() { 
        io.set("transports", ["xhr-polling"]); 
        io.set("polling duration", 10); 
    }); 
    

    을하지만이 같은 사실은 같은 것이 아니다 .. : Aashay의 게시물에 링크에서 알 수 있듯이, 당신의 server.js 또는 app.js 파일에이 코드를 추가! 예를 들어 OpenShift.com의 경우 포트 8000을 통해 앱에 연결 한 다음 실제로 웹 소켓을 사용하는 반면 기본 포트는 아파치 문제 때문에 귀찮게 지원하지 않습니다.

    +0

    Chrome은 2009 년 현재 소켓을 지원합니다. http://blog.chromium.org/2009/12/web-sockets-now-available-in-google.html – AlienWebguy

    관련 문제