2013-06-04 7 views
0

나는 다음에 대해 nodejs에 대해 많이하지만 여전히 명확하지를 읽고 있었다 : TCP 프로토콜 클라이언트와 서버와노드가 여러 동시 연결을 유지하는 방법은 무엇입니까?

  • 는 하나 개의 포트에 동의 한 후 연결을 유지할 수 있습니다. 서버는 클라이언트의 IP 주소를 알고 있으므로 메시지를 다시 보낼 수 있습니다. nodejs를 사용하면 여러 클라이언트가 동일한 포트의 동일한 nodejs 서버에 연결할 수 있습니다. 이것이 어떻게 가능할까요? 동일한 서버에서 동일한 포트에 여러 연결을 설정하는 방법
  • 클라이언트가 NAT 뒤에 있으면 IP가 동적 일 수 있으므로 nodejs 서버가 어떻게 클라이언트에 데이터를 보낼 수 있습니까?
  • 서버 및 클라이언트에서 지속적인 연결을 유지 관리 할 때 리소스 사용률은 어떻게됩니까?
  • nodejs 서버가 충돌하면 어떻게됩니까? 클라이언트가 어떻게 다시 연결을 시작할 수 있습니까?
  • 클라이언트 측에 네트워크 문제가 있고 매 5 분마다 연결을 종료하고 연결을 시작하면이 시나리오를 처리 할 수있는 방법이 있습니까? TCP 프로토콜 클라이언트와 서버와

답변

4

는 하나 개의 포트에 동의하고 유지할 수 connection.Server는 여러 클라이언트가 동일한 nodejs에 연결할 수 있습니다 우리가 nodejs를 사용 messages.If을 다시 보낼 수 있습니다 따라서 클라이언트의 IP 주소를 알고 동일한 포트에있는 서버. 이것이 어떻게 가능할까요? 동일한 서버에서 동일한 포트에 여러 연결을 설정하는 방법

단일 포트에서 유지할 수있는 연결 수에는 제한이 없습니다 (실제로는 운영 체제 또는 하드웨어 제한이있을 수 있음). 물론 하나의 프로세스 만 포트에서 수신 대기 할 수 있지만 연결과는 아무런 관련이 없습니다. 노드마다 다르므로 모든 TCP 서버는 이와 같이 작동합니다.

클라이언트가 NAT 뒤에 있으면 IP가 동적 일 수 있으므로 nodejs 서버가 어떻게 클라이언트에 데이터를 보낼 수 있습니까?

NAT가 작동하는 방식을 본질적으로 묻습니다. 다시 말하지만,이 경우에는 노드 특정이 없습니다. NAT 서버는 필요한 경우 패킷 헤더를 변경하고 모든 연결과 마찬가지로 라우팅을위한 변환 테이블을 유지 관리합니다. 서버와 클라이언트

오버 헤드에 지속적인 연결을 유지 자원 활용 될 것입니다 무엇

정말 그냥 연결 자체에 대한 아주 최소한의 것입니다. 약간의 기억이지만 큰 그림에서는 거의 중요하지 않습니다. 각 연결마다 연결된 추가 데이터를 저장하는 경우에는 다를 수 있습니다. Node.js는 많은 수의 동시 연결을 처리하지만 걱정되는 경우 언제든지 벤치 마크 테스트를 검색하거나 직접 작성할 수 있습니다.

nodejs 서버가 고장난 경우 어떻게됩니까? 클라이언트가 다시 연결을 시작할 수있는 방법은 무엇입니까?

소켓은 모두 closeerror 이벤트를 방출합니다. 그것들을 듣기 만하면 나중에 백 오프 지연으로 나중에 다시 연결을 시도합니다.

클라이언트 측에 네트워크 문제가 있고 5 분마다 연결이 종료되면이 시나리오를 처리 할 수있는 방법이 있습니까?

여기에 무엇을 묻고 있는지 확실하지 않습니다. 클라이언트는 이전 질문/답변에 언급 된대로 다시 연결하면됩니다. 특정 데이터를 클라이언트 소켓과 연결하고 데이터가 해제되기 전에 클라이언트가 재접속 할 수있는 유예 기간을 원할 경우 일정량 후 해당 자원을 해제하는 시간 초과를 설정해야합니다 시간. 그런 다음 연결 수신기 또는 인증 이벤트에서 새 연결을 분석하여 최근에 연결이 끊어진 클라이언트와 일치하는지 확인해야합니다.

특히 브라우저/서버 연결 이상의 용도로 사용할 수 있지만 사용 사례가 웹 기반 인 경우 socket.io을 사용하는 것이 좋습니다. (재 연결, 자원 연결, 유예 기간 연결 해제 등)에 대해 염려해야 할 사항이 많거나 적을 것입니다.

0

TCP 연결이 계속 열려 있습니다. 저장은 AJAX의 경우와 같이 서버에 새로운 메시지가 있는지를 확인하기 위해 긴 풀링 방식으로 서버에서 지속적으로 새로 고침 할 필요가없는 클라이언트에 의해 수행됩니다. 클라이언트가 서버에서 새로 고치는 데 몇 초마다 새 연결을 만드는 것은 서버, 프록시 및 라우터에 많은 부담을줍니다. Node.js의 경우 연결은 열려 있지만 클라이언트 또는 서버가 보낼 항목이있을 때까지 활성화되지 않습니다. 여기에 좋은 기사가 있습니다. http://www.html5rocks.com/en/tutorials/websockets/basics/

채팅 클라이언트가 1000 명이 있다고 상상해보십시오. 새 메시지가 도착하면 매 3 초마다 서버에 요청합니다. 그 결과 2000 건의 요청과 서버의 분당 응답이 발생합니다. Node.js의 경우 서버는 보낼 메시지가있을 때만 클라이언트에 메시지를 보내고 그 동안에는 1000 개의 모든 연결이 유휴 상태이지만 열린 상태로 유지됩니다.

TCP 연결은 항상 포트 80과 같은 포트에서 시작되지만 통신이 열려있을 때 각 연결에 할당 된 다른 포트에서 통신이 유지됩니다. 따라서 연결을 계속 열어 두어야하지만 이전과 같이 지속적으로 풀링 메시지를 보낼 필요가 없습니다.

관련 문제