Xajax 및 PHP를 사용하여 실시간 채팅을 어떻게 작성할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/965890

  •  12-09-2019
  •  | 
  •  

문제

Xajax 및 PHP를 사용하여 실시간 채팅을 어떻게 작성할 수 있습니까?

다시 말해, 서버에서 여러 클라이언트로 Xajax 응답을 보내는 방법이 있습니까? 아니면 클라이언트 측에서 몇 초마다 새 메시지를 확인할 수있는 유일한 가능성이 있습니까?

도움이 되었습니까?

해결책

아니요. 클라이언트는 서버를 반복적으로 "폴링"해야합니다.

여기서 핵심은 상호 작용 디자인을 생각하는 것입니다. 요령은 사용자가 채팅이 즉각적이라고 생각하도록 속이는 것이지만 실제로는 1 또는 2 또는 3 초 또는 10 초마다 한 번 업데이트됩니다.

아이디어 :

1) 사용자가 메시지를 보낼 때 채팅에서 직접 표시하고 설문 조사를 트리거하십시오.

2) 여론 조사에 다른 사용자의 여러 메시지가 다시 돌아 오면 한 번에 모두 추가하지 말고 실제로 1-2 초 정도 동안 추가하여 임의의 간격으로 추가하여 들어오는 것처럼 보이게합니다. "즉시"그리고 독립적으로. (많은 메시지가 한 번에 들어 오면 사용자는 채팅이 계속 업데이트 된 후 지속적으로 업데이트되지 않았다는 것을 매우 빨리 깨닫게됩니다.)

3) 사용자가 x 시간 동안 유휴 상태 인 경우. 10 초마다 한 번씩 여론 조사 요금을 떨어 뜨립니다.

4) 사용자가 활성화되면 많은 메시지를 보내면 더 자주 투표합니다.

5) 채팅이 마지막으로 업데이트 된 시간을 쓰는 모든 채널에 대한 정적 파일을 가지고 있습니다. 예를 들어 파일 chat-teenfun-lastupdate.txt 내용이 있습니다 1224934239 또는 원하는 시간 형식. 이 파일을 정적으로 제공하고 클라이언트가 채널이 업데이트되었는지 확인하기 위해이 파일을 폴링하도록하십시오. chat-poll.php?ch=teenfun 그것은 동적 검사를합니다. 정적 파일은 동적 스크립트와 관련된 작업에 따라 약 10-100 배 더 빠르게 제공되며 250 명 이상의 사용자 폴링을 받으면 필요합니다.

행운을 빌고 재미있게 보내!

/0

추신. 또는 실제로 클라이언트가 서버로 Ajax 호출을 수행하고 '매달려'유지할 수 있습니다. 그것은 당신이 그들의 요청을 받아들이고 데이터를 다시 보내기 시작하는 척하지만, 당신은 그냥 잠시 멈 춥니 다. 무언가가 일어 났을 때 당신은 과제 데이터로 응답을 마칩니다. 이것이 작동하기 위해서는 자신의 HTTP-Server를 작성해야한다고 생각합니다. 이는 특히 250 개의 PHP 프로세스가 메모리에 매달려있을 수 없기 때문에 특히 그렇습니다. 아마도 Lua 캐시 모드와 함께 이런 식으로 LightTPD를 사용할 수 있습니다. 모르겠어요. 그래도 흥미로울 것입니다. 지옥 나는 언젠가 그것을 시도해야한다 :)

다른 팁

물론, 나는 많은 사용자들에게 그것이 매우 효율적이라고 생각하지 않습니다. 각 클라이언트가 서버를 폴링하여 새 메시지가 있는지 확인하거나 사용할 수 있습니다. 혜성 기술 서버가 새 메시지를 클라이언트에게 푸시 할 수있는 Xajax의 혜성 플러그인. 이것이 Xajax와 PHP를 사용하여 구현되는 방법은 저를 넘어서지 만, 여기에 구현하려고하는 방법은 다음과 같습니다.

각 클라이언트가 서버 (로그인 등)에 연결하도록하십시오.

  1. 클라이언트가 보낸 각 메시지에 대해 (발신자) 클라이언트의 메시지 대기열 업데이트 (수신기)
  2. COMET을 통해 새 메시지를 큐에서 새 메시지를 위해 클라이언트를 서버로 설비하십시오.
  3. 새 메시지가있는 경우 GUI 업데이트.
  4. 린스, 거품, 반복

Ejabberd와 같은 진정한 IM 서버를 사용하면 먼 길을 갈 수 있으며 더 효율적이며 사용자가 데스크탑 클라이언트를 통해 연결할 수 있습니다 (원하는 경우). 나는 아마 그것을 백엔드로 사용할 것입니다. iow ejabberd는 서버 일 것이고 PHP는 클라이언트가 사용하는 것입니다. PHP의 XMPP, WebGui의 대리자 역할을합니다.

또한보십시오:
Gmail의 채팅 기능 (및 확장 성 문제)의 Google TechTalk

그게 내 $ 0.02입니다

HTTP 푸시 기술이없는 한 실시간 채팅 만 사용하지 않습니다. JavaScript.

가능한 작업장 :

  • a Flash 영화 또는 a Java 소켓 통신을 수행하기위한 애플릿
  • 몇 초 동안 서버 측에서 폴링 요청을 다시 보유

WebSockets를 사용할 수 있지만 새로운 HTML5 기능이면 제한되어 있습니다. 당신에게 행운이 있습니다 양말,이를 처리하지 않는 브라우저의 웹 소켓을 구현합니다.

호스팅 측면에는 Websockets 서버를 사용할 수 있어야합니다. PHP 용은 몇 가지가 있습니다.

PHP/JSP와 같은 스크립팅 언어로 작성된 채팅 서버를 구현하려는 경우 HTTP 연결 관리 기술은 옵션 목록에서 틱해야합니다. 그 이유는 대부분의 웹 세버 (특별 공유 호스트)가 너무 많은 연결을 좋아하지 않기 때문입니다.

이것에서 웹 클라이언트와 PHP 채팅 서버를 구현하는 데 필요한 모든 것을 찾을 수 있습니다. "서버 측 스크립팅 언어를위한 최적화 된 채팅 서버 프로토콜" 출판.

내가 본 가장 좋은 전략은 AJAX 메시지 요청을 수행 한 다음 완료 되 자마자 동일한 요청을 다시 시작하는 것입니다.

서버 측면에서 60 초 동안 또는 새 메시지가 수신 될 때까지 스크립트 "스톨"을 만듭니다. 이로 인해 최대 60 초 동안 동일한 연결을 계속 열 수 있지만 새 메시지가 수신되면 출력하여 즉시 중지되어 클라이언트 측 AJAX가 다른 연결을 엽니 다.

이는 새 메시지에 대한 거의 즉각적인 알림을 제공하며 서버에서 X 초마다 새 연결을 만드는 것보다 훨씬 쉽습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top