2014-03-04 3 views
2

메시징 앱을 확장하려고합니다. 백 엔드에 Socket.io 및 Redis-Store에서 nodeJS를 사용하고 있습니다. 클라이언트는 아이폰 네이티브 브라우저, 안드로이드 브라우저 등일 수 있습니다.xhr-polling을 사용할 때 Socket.io 서버 응답 시간이 크게 느림

Nginx를 사용하여 노드 연결에 SSL을 사용하여 소켓 연결의로드 균형을 조정합니다. 나는 socket.io 앱을 클러스터링하지 않고 대신 10 개의 노드 서버 (사용자가 엄청나 다)를 균형있게로드합니다. 전송이 Websockets 일 때 모든 것이 잘 보이지만 xrr 폴링 (오래된 안드로이드 폰의 경우)으로 넘어지면 New-relic에서 최대 3000 rpm의 거대한 응답 시간을 볼 수 있습니다. 그리고 매시간마다 노드 서버를 다시 시작해야합니다. 그렇지 않으면 서버가 중단됩니다.

나는 잘못된 것을하고 있는지 궁금 해서요. xhr-polling 전송을 사용할 때 socket.io를 확장 할 수있는 조치가 있다면? 설문 조사 기간을 늘리거나 줄이는 것과 같은가?

답변

3

xhr 폴링은 잘못된 폴트를 수행하지 않으며 긴 폴링이라고도합니다. 이름은 연결이 더 길게 열려 있다는 사실에서 비롯됩니다. 일반적으로 일부 응답은 전선 아래로 보내질 때까지옵니다. 연결이 닫히면 새 연결이 열려 다음 정보를 기다립니다.

당신은 새로운 유물이 당신에게 폴링 요청의 응답 시간을 보여줍니다이 여기 http://en.wikipedia.org/wiki/Push_technology#Long_polling

에 대한 자세한 내용을보실 수 있습니다. Socket.IO의 기본 "폴링 지속 시간"은 20 초입니다.

폴링 지속 시간을 늘리면 RPM이 높아지고 폴링 지속 시간이 길어질수록 RPM은 줄어 듭니다. 폴링 기간을 늘리거나 20 초 기본값을 유지하는 것이 좋습니다.

또한 New Relic이 긴 폴링에 대해 관련성없는 데이터를 표시하지 않게하려면 app에 필요한 newrelic.js에 무시 규칙을 추가 할 수 있습니다. 이것은 newrelic npm 모듈 문서에 자세히 설명되어 있습니다. https://www.npmjs.org/package/newrelic#rules-for-naming-and-ignoring-requests

+0

새로운 -relic npm 패키지에 무시 규칙을 추가했는데 훨씬 좋아졌습니다. – Charbz

관련 문제