2009-07-23 2 views
4

나는 클라이언트 폴링에 의해 구동되는 간단한 채팅 서버를 만들었습니다. 클라이언트는 몇 초마다 데이터 요청을 보내고 새로운 메시지와 피어가 아직 연결되어 있는지 여부에 대한 정보를받습니다.폴링에 의해 구동되지 않는 채팅 서버는 어떻게 만듭니 까?

클라이언트가 모바일 플랫폼 (iPhone)에서 실행 중이기 때문에 폴링을 없애고 배터리를 빨리 소모하는 방법을 찾고있었습니다. http 연결을 무기한으로 열어 둘 수는 있지만 실제로이 기술을 활용하는 방법을 이해하지 못했다고 읽었습니다. 또한 이러한 연결이 모바일 환경에서 사용하기에 충분히 안정적인지 궁금합니다.

이상적인 시나리오는 영향을주는 이벤트 (예 : 메시지 게시 또는 오프라인 상태)가 발생한 경우에만 서버가 클라이언트에 데이터를 보냅니다.

http를 통해이를 수행하는 것이 좋습니까? 아니면 tcp를 통해 자체 프로토콜을 작성해야합니까? xmpp를 나의 필요에 맞게 커스터마이징하는 것이 얼마나 힘들겠습니까 (채팅 서버에는 쉽게 구현해야하는 몇 가지 특수 기능이 있습니다).

답변

1

난 그냥 (I 질문에서 언급) 다음과 같은 기술에 대해 설명하는 this article 자신을 발견 : 클라이언트가 HTTP 요청 을 가지고 서버가 요청을 잡아 가지고 ...

을 큐에 메시지가 나타날 때까지 을 누릅니다. TCP/IP 연결이 분실 또는 시간 초과 인 경우 클라이언트는 새 HTTP 요청을 만들고 지연은 요청/응답 쌍의 왕복 시간 일뿐입니다. . . 효과적으로 서버에 두 개의 TCP/IP HTTP에 대한 연결, 클라이언트가 필요 이 모델하지만 영구적 없음과 어떻게 푸시 기술에 대한

1

Comet을 포함한 다양한 기술을 사용하는 this project을 확인하십시오. Release details are here, 여기에 해당 페이지

그것은 내가 지난 달 내 여가 시간에 에서 일한지 프로젝트의 을 보여주는 첫 공개를 발표 을 할 수 있도록 내 별개의 기쁨에서 미리보기입니다 둘, 새로운 웹 기반 IRC 채팅 응용 프로그램.

이 프로젝트는 이 있도록 개발해야했다 새로운 기술을 많이 모아 실현 가능한, 확장이 가능하고 효율적인.

기본 도구 중 일부는 내가 생각이 추적 할 수없는 가망을 에 구축 '안정적만큼'이미 출시, 등 내가 쓴 php Socket Daemon library 이 의 수천까지 수백을 처리 할 수 ​​있도록로 " Comet "HTTP 연결 및 균등 한 IRC 클라이언트 연결입니다.

0

나는 이것이 거의 불가능하고 위험하다고 생각합니다. 인터넷은 클라이언트와 서버 간의 연결이 항상 신뢰할 수없는 것으로 처리된다는 것을 의미하는 비 상태 및 연결없는 상태로 작동합니다. 그리고 이것은 재미있는 것이 아닙니다.

상태 연결을 시도하면 새로운 문제가 발생합니다. 특히 3g 어플리케이션에서. 연결이 끊어지면 어떻게해야합니까? 서버에 대한 제어권이 없으므로 밀어 넣을 수 없습니다.

나는 SMS/문자 메시지를 보내고이를 처리하는 응용 프로그램이 더 쉬울 것이라고 생각한다.

+0

많은 사람들이 Cometish 접근법 (BOSH 등)을 사용하여 성공적으로 사용 해왔다. 연결이 끊어지면 새 연결을 설정합니까? 이것이 거의 불가능하다고 생각하는 이유에 대해 더 많이 듣는 것은 재미있을 것입니다. – Felixyz

3

저는 여러분이 BOSH보다 XMPP를 설명한다고 생각합니다.

http://xmpp.org/extensions/xep-0206.html

나는 채팅 서버 및 비 모바일 기기에서 자바 스크립트 클라이언트 사이의 HTTP 결합 방법을 사용했습니다. 그것은 나를 위해 잘 작동했습니다.