2011-11-20 2 views
3

저는 파이썬 (토네이도)을 서버 측에서 사용하고 있고 일부 자바 스크립트는 클라이언트 측에서 사용하고 있습니다. 나는 한 명의 사용자가 다른 사람에게 메시지를 보내는 일반적인 상황을 가지고 있습니다. 그리고 서버가 클라이언트의 브라우저 (메시지 수신자)에게 새 메시지를 알리 길 원합니다. 내가 어떻게 해? 클라이언트 (아마도 websocket을 사용) 또는 다른 것과 장기간 연결을해야합니까? 웹 소켓을 통해 conenction을 설정하는서버의 일부 이벤트에 대해 클라이언트의 브라우저에 알리는 방법은 무엇입니까?

PS 나는 인해 서버 betwebb 연결을 설정하는 프로젝트의 높은 부하, 그래서 PS2 좋은 라이브러리를 TornadIO

을 발견하고 각 클라이언트가 의심스러운. 나는 c10k 문제를 두려워한다. 내 지식이 부족할 수도 있습니다.

+1

내 대답보기 : http://stackoverflow.com/questions/3682198/writing-a-chat-application/3682211#3682211 (동일한 질문에 대한 다른 답변) – NullUserException

+0

괜찮 았지만 질문이 있습니다. 혜성. 나는 1 만 명의 사용자가 연결되어 있고 아무도 연결할 수없는 상황을 두려워한다. (c10k 문제) – dizpers

+2

많은 사용자가 하나의 채팅 서버에 연결될 것으로 예상된다면 기본 아키텍처 외에도 많은 문제가 발생할 것이다. – jwiscarson

답변

1

저는 서버 측에서 python (Tornado)을 사용하고 클라이언트 측에서 일부 자바 스크립트를 사용하고 있습니다. 나는 한 명의 사용자가 다른 사람에게 메시지를 보내는 일반적인 상황을 가지고 있습니다. 그리고 서버가 클라이언트의 브라우저 (메시지 수신자)에게 새 메시지를 알리 길 원합니다. 내가 어떻게 해? 클라이언트 (아마도 websocket을 사용) 또는 다른 것과 장기간 연결을해야합니까?

예 : Tornado와 같은 실시간 웹 서버 사용 - 예. TornadIO는 이전 버전의 브라우저에 대한 대체 옵션이있는 socket.io를 사용할 것이므로 좋은 해결책입니다.

Wikipedia entry on the C10k issues

이 문제를 해결 한 서버의 목록을 제공합니다

몇 웹 서버는 C10K 문제에 대응하기 위해 개발 된

:

  • 의 nginx, 이벤트 -에 의존 (WordPress.com은 nginx를 사용하여 C10K 문제를 해결합니다.) [2]
  • 요청을 처리하기 위해 비동기 아키텍처를 사용하는 Lighttpd [3]
  • 체로키, 경량 웹 서버 [4]
  • 토네이도, 비 블로킹 웹 서버와 웹 응용 프로그램 프레임 워크 [5] 파이썬으로 작성된
  • 아파치 손재주, 비동기의 JVM
  • 에서 실행중인 웹 서버를 비 차단
  • JBoss Netty는 프로토콜 서버 및 클라이언트와 같은 네트워크 응용 프로그램을 빠르고 쉽게 개발할 수있는 NIO 클라이언트 서버 프레임 워크입니다. [6]
  • Google의 V8 JavaScript 엔진에서 실행되는 비동기식 비 차단 웹 서버 [7] ]
  • EventMachine, Ruby EventMachine에서 실행되는 비동기식 비 차단 웹 서버
  • 얼 (Yaws), 얼랭으로 작성된 웹 서버; Erlang의 매우 가벼운 프로세스로부터 이익을 얻을 수 있습니다.
  • 메두사, 당신이 볼 수 있듯이 파이썬

작성 비 차단 웹 서버 라이브러리는, 토네이도가 나열됩니다.

너머의 질문은 잠재적으로 서버 간 알림을 얻는 방법보다 horizontal scaling에 관한 것보다 많습니다.

어떤 realtime server solution을 선택 하느냐에 따라 문제가되지 않을 수도 있습니다. 예를 들어 Caplin System's Liberator의 단일 인스턴스는 10,000 개의 영구 연결보다 훨씬 많은 수를 달성 할 수 있습니다.

관련 문제