2013-05-02 4 views
3

긴 작업 처리 시간 (경우에 따라 분 순서)을 사용하여 클라이언트 - 서버 API를 구현하고 있습니다. 일부 API 호출은 짧고 즉시 응답하지만 쿠페는 일부 백엔드 처리가 필요합니다. node.js를 웹 서버로 사용하고 있습니다. 다음과 같이 나의 현재 implementaion이 -비동기 RestFul 및 Websocket

클라이언트 (브라우저) < -> 노드 JS < -> 엔진

엔진은 각 작업 (C++ 코드를) 처리하는 백엔드 프로세스입니다. 모든 상호 작용은 http입니다. 이제는 전통적으로 긴 작업을 async ajax/restful 요청과 짧은 작업을 sync 쾌적한 요청으로 구현했습니다.

나는 긴 처리 작업 (대용량 데이터를 처리)에 대한 상태 업데이트해야 할 것입니다 - 완벽한 중간 결과처럼, 퍼센트 등

내가 대안으로 WebSocket을에서 loolking하고 (그리고 나는 그것에 비교적 새로운 오전). 여기에 내 질문이있다 - 비동기 편안한 API 대신 오랜 일자리를 위해 웹 소켓을 조사해야 할까? (나는 클라이언트 타임 아웃, 긴 폴링 등을 피하는 것을 좋아한다)?

  • 모든 요청을 웹 소켓으로 이동하는 방법 (이유는 무엇입니까?)
  • 일반적으로이 아키텍처를 구현하는 모범 사례. (이전에는 웹 서버와 엔진 간의 상호 작용이있는 사용자 지정 명령을 사용하여 간단한 TCP 연결로 프로젝트 작업을했습니다.) - 브라우저 간 지원 (특히 이전 버전)에 대해 걱정하지 않습니다. 지금.

  • +0

    아래에 제안 된 것과 같이 nodejs는 socket.io를 사용하여 websocket과 잘 어울립니다. 브라우저가 웹 소켓을 지원하지 않으면 다른 프로토콜로 넘어가지만 여전히 작동합니다. 나는 이것이 C++ 솔루션을 찾는 것보다 더 단순한 것이라고 생각한다. – coffekid

    답변

    1

    브라우저와 C++ 백엔드 사이에서 통신하기 위해 웹 소켓을 사용하여 클라이언트 - 서버 API를 구현했습니다. 우리가 사용한 라이브러리는 libwebsockets입니다. http://git.warmcat.com/cgi-bin/cgit/libwebsockets/

    웹 소켓에서 장기 실행 명령과 동시 명령 모두 잘 작동했습니다. 클라이언트에서 여러 요청을 보낼 수 있으며 서버는 준비가되었을 때 응답 할 수 있으며 응답을 순서가 맞지 않게 보내거나 응답을 단일 응답으로 병합 할 수 있습니다.

    Ajax에 필요한 긴 폴링 스터프는보다 간단 해집니다. 예를 들어, &입니다. 소켓 연결이 끊어지면 서버에서 클라이언트 단절을 감지 할 수 있습니다.

    우수 사례로서, 나는이 기사에 기초하여 디자인했습니다. JSON을 사용하여 메시지를 인코딩했습니다.

  • http://www.altdevblogaday.com/2012/01/23/writing-your-own-websocket-server/
  • 당신이 Socket.io로 볼 수 Node.js를 서버 인 경우 http://www.altdevblogaday.com/2012/02/01/controlling-your-game-engine-over-websocket/

    • . 이것은 통신 레이어를 추상화하고 사용할 수있는 것에 따라 ajax, websockets 등을 선택할 수 있습니다.