2011-09-25 3 views
1

나는 마침내 내가 지금하고 싶었던 간단한 채팅 페이지를 만들었지 만, 나는 나의 서버에 문제가있다.Long 폴링으로 인해 서버에 문제가 있습니까?

롱 폴링이 올바른 용어인지는 잘 모르겠지만, 이해하는 바에 따르면, 나는 그렇게 생각합니다. 나는 아약스 요청에서 보낸 시간보다 새로운 시간을 가진 메시지를 mysql 데이터베이스에서 검사하는 PHP 페이지에 대한 아약스 호출을 가지고있다. 새로운 메시지가 없으면 반복 될 때까지 루핑 및 확인을 계속합니다. 그렇지 않으면 그냥 새 메시지를 반환하고 클라이언트 스크립트는 메시지를받는 즉시 다른 아약스 요청을 보냅니다.

000webhost의 서버가 몇 개의 채팅 메시지 후 응답을 중지하고 x10 호스트의 서버가 리소스 제한을 초과하는 것에 대한 메시지를 보내는 것을 제외하고는 모든 것이 잘 작동합니다.

어쩌면 이것은 채팅 시스템을 수행하는 어리석은 방법 일 수도 있지만 그 방법은 모두 알고 있습니다. 더 좋은 방법이 있으면 알려주세요.

편집 : 이런 젠장, 서버에서 while 루프에 잠자기 시간을 넣지 않았어.

+2

cometd의 구현을 살펴보십시오. http://cometd.org/ – perissf

+0

링크가 전혀 도움이되지 않습니다. 나는 cometd가 무엇인지 전혀 모르며, 그들의 사이트에있는 "확장 가능한 HTTP 기반 이벤트 라우팅 버스"에 대한 설명은 전혀 도움이되지 않습니다. 나는 내가 아는 것을 사용하려고 애쓰는 것이 싫지만, 나는하기 전에 그들을 이해하는쪽으로 나아갈 것입니다. 어디서부터 시작해야합니까? – mowwwalker

답변

1

당신은 이것에 관해 많은 읽을 거리를 발견 할 수 있지만, 나는 무료 웹 호스팅이 당신이 생각하고있는 것을 할 수있게 할 것이라는 것을 믿지 않는다. PHP는 채팅 시스템을 생성하기 위해 실제로 설계되지 않았습니다.

WebSockets을 사용하고 Node.JSSocket.IO 또는 Tornado with Python을 사용하는 것이 좋습니다. 거기에는 많은 솔루션이 있지만 대부분의 경우 단일 연결로 시작하고 끝내는 간단한 스크립트 대신 여러 연결과 동시에 상호 작용하는 전체 프로그램을 실행해야하므로 자체 서버를 실행해야합니다.

+0

웹 소켓이란 무엇입니까? 멍청한 녀석 인 것에 대해 유감스럽게 생각하지만, 나는 확실히 배우고 싶어한다. – mowwwalker

+0

나는 이런 종류의 일에 node.js를 사용하는 것에 완전히 동의한다. 더 많은 전통적인 웹 서버가 잘 처리하지 못하는 방식으로 많은 동시 연결에 맞게 확장되도록 설계되었습니다. 나는 웹 소켓에 대해 그렇게 확신하지는 않는다. 웹 서버에 의존하여 [브라우저 지원 제한] (http://caniuse.com/#search=websockets) 이상의 긴 폴링의 추가 HTTP 오버 헤드를 선호합니다. – sethobrien

+0

나는 nodejs가 어떤 생각인지 전혀 모른다. 어떻게 작동하는지 또는 사용 방법을 모르겠습니다. – mowwwalker

0

서버에 최신 메시지가 있는지 여부와 관계없이 동일한 전략을 사용하는 경우는 어떻게됩니까? 서버는 항상 최신 메시지 목록을 반환합니다.이 목록은 최신 메시지가 없을 때 비어있을 수 있습니다. 빈 목록은 특수 데이터 토큰으로 인코딩 될 수도 있습니다. 그런 다음 클라이언트는 두 경우 모두 동일한 방식으로 진행됩니다. 수신 된 데이터를 처리하고 일정 기간 후에 새 메시지를 요청합니다.

+0

타임 아웃을 사용하여 서버를 확인하면 더 이상 서버가 작동하지 않습니다. 새 메시지없이 돌아 오면 가능한 한 빨리 요청을 보내고받으며 브라우저가 다운됩니다. – mowwwalker

0

각 루프마다 코드를 잠자 게하십시오. 코드는 데이터베이스/서버에 초당 여러 번 루프를 입력합니다.

그러나 여전히 노드 또는 웹 소켓은 실시간 채팅을 처리하는 데있어 더 좋은 기술입니다.

+0

이것은 5 년 된 질문입니다.사용자는 2011 년에 이미 "서버의 while 루프에 잠자기 시간을 두지 않았어."라고 말했습니다. 그리고 수용된 대답은 이미 Node.JS와 웹 소켓을 추천했습니다. – miken32