2010-06-30 2 views
3

하루 종일 검색 한 후 온라인 채팅에 가장 적합한 솔루션에 대해 이야기하고자합니다.온라인 채팅 - Ajax 설문 조사 또는 Reverse Ajax

이 내가 아는 것입니다 :

아약스 조사 이전, 대역폭의 소비, 그리고 일을하지 확장 방법입니다. X 초마다 서버에 새 데이터를 요청합니다. 이것은 X seconds * number_of_connected_users마다 하나의 데이터베이스 쿼리를 의미합니다.

Reverse Ajax와 그 응용 프로그램 (혜성) 중 하나는 사용자 정의 웹 서버 또는 number_of_connected_users의 오랜 시간의 HTTP 연결을 처리 할 수있는 전용 혜성 서버가 필요합니다.

나의 실제 서버는 1 Xeon CPU, 1GB RAM 및 1Gb/s 대역폭입니다. 서버는 가상 머신입니다 (따라서 확장 성이 뛰어납니다).

서버 및 미래 성장하는 사용자 기반으로 확장 할 수있는 솔루션이 필요합니다.

나의 의심은 다음과 같습니다

  • 얼마나 아약스 폴링 방법은 내 대역폭 사용량에 영향을 미칠 수 있습니까?

  • 필요한 경우에만 db 쿼리를 수행하기 위해 어떤 방법으로 아약스 폴링을 최적화 할 수 있습니까?

  • 혜성 서버를 웹 서버 (Apache)의 동일한 컴퓨터에서 실행할 수 있습니까?

  • 혜성 방식을 사용하면 데이터베이스에서 쿼리를 수행 한 다음 응답을 보내려면 간격이 필요하므로 실시간은 어디에 있습니까?

  • 실제 서버로는 혜성 방식으로 작동합니까?

감사합니다.

답변

1

도망 갈 수 있으면 폴링을 사용하지 마십시오. 서버와 클라이언트 모두에서 리소스가 막히게됩니다. 서버는 폴링과 함께 더 많은 데이터베이스 요청을해야하며, 데이터가 변경되었는지 더 확인해야합니다.

아약스 폴링 방법은 또한 더 많은 불필요한 요청을 생성합니다. 폴링을 사용하면 메모리와 CPU를 사용합니다. 혜성 (그것이 제대로 된 경우)은 메모리 만 사용합니다.

혜성 서버는 아마도 아파치에서 실행할 수 없습니다. 아파치는 장기 실행 요청을 위해 설계된 것 같지 않습니다. (루비에서 EventMachine을 사용하여) 귀하의 혜성 서버를 구현하는 것이 좋습니다. (Twisted를 사용하는) 파이썬에서 또는 C로 사용하십시오.

데이터베이스 쿼리를 수행하는 간격이 필요한 이유가 없습니다. 변경을하면 혜성 서버에게 변경 사항을 필요한 사용자에게 알리라고 지시 할 수 있습니다.

0

저는 PHP로 웹 사이트를 쓰고 있습니다.

그래서 저는 (비틀린) 서버를 실행하고 파이썬으로 채팅 응용 프로그램을 작성해야합니까? 이 응용 프로그램은 들어오는 아약스 요청을 처리하고 클라이언트에 새 데이터를 푸시해야합니다.

잘 이해한다면이 접근 방식에는 데이터베이스가 필요하지 않습니까?

+0

맞습니다. 아파치 문제는 요청 당 스레드의 패러다임을 따르므로 장기 실행 요청을 지원하지 않는다는 것입니다. 이것은 몇 가지 연결 이상에서 깨질 것입니다. – Maz

관련 문제