2013-04-07 3 views
3

JavaScript, jQuery, MySQL 및 PHP를 사용하여 채팅 응용 프로그램을 만들고 있는데, 클라이언트가 서버에서 채팅 메시지를 검색하는 가장 좋은 방법은 무엇인지 궁금합니다. 나의 현재 잠재적 인 후보자는 Polling, Long Polling, HTML5 Server-Sent Events (EventSource) 및 WebSockets입니다. 이 중 가장 빠른 (즉각적인 메시지) 가장 효율적인 방법 (가능한 경우 이유를 설명하십시오)은 무엇입니까? 아니면 더 좋은 방법이 있다면 답안에서 자세히 설명하십시오.클라이언트가 서버에서 채팅 메시지를 검색하는 가장 좋은 방법은 무엇입니까?

또한 Node.js + Socket.IO도 살펴 봤지만 찾은 설명서와 샘플 코드는 저에게 감명을주지 않았습니다.

마지막으로, XAMPP를 로컬 서버로 사용하고 MySQL을이 응용 프로그램의 데이터베이스로 사용하고 있습니다.

도움을 주시면 감사하겠습니다.

+0

IRC가 방법입니다. – hakre

+0

@hakre 저는 IRC가 무슨 뜻인지 이해할 수 없습니다. 그것의 빠른 검색은 "인터넷 릴레이 채팅"이라고 말하지만, 그 이상은 얻을 수 없습니다.나는이 techonology/protocol/그것이 무엇이든 어떤 문서도 찾을 수없는 것 같습니다. 당신은 링크와 함께 올바른 방향으로 나를 가리켜 주시겠습니까? –

+0

@kpsuperplane : IRC는 실제로 인터넷 릴레이 채팅입니다. 그것은 프로토콜입니다. 물론 [Wikipedia article] (https://en.wikipedia.org/wiki/Internet_Relay_Chat)이 있습니다. 기술적 인 세부 사항은 [RFC] (https://tools.ietf.org/html/rfc1459)입니다. 다양한 구현이 있습니다. 지정된 '공식'사람은 없습니다. 다른 웹 또는 메일 서버를 볼 때와 같은 방법으로 옵션이 무엇인지 확인해야합니다. – icktoofay

답변

4

동시에, 나열된 옵션은 효율성이 낮은 순서대로 나열됩니다.

폴링이 가장 효율적이지 않습니다. 메시지가 있는지 여부를 폴링하고 다른 클라이언트가 보내고받는 메시지 사이에 대기 시간을 발생시킵니다.

롱 폴링이 더 좋습니다. 전송 된 메시지를받을 수는 있지만 다시 연결하는 데 약간의 지연이있을 수 있습니다. 지연 중에는 메시지가 배달되지 않지만 그렇지 않은 경우 메시지가 실제로 전송됩니다.

COMET (언급하지 않음)은 긴 폴링보다 좋지만 Server-Sent Events보다 나쁩니다. 연결시 시간 초과가있는 대부분의 웹 서버와 브라우저로 인해 때때로 다시 연결해야하지만 메시지를 보낼 때마다 연결을 다시 설정할 필요는 없습니다. 긴 폴링처럼 다시 연결하는 동안 지연이있을 수 있지만 그렇지 않은 경우 일반적으로 즉시 발생합니다.

서버 보낸 이벤트는 COMET과 유사하지만 심박지 않은 경우 브라우저의 기본 지원을 통해 제한 시간을 무시할 수 있으며 수명이 다할 때만 한 연결 만하면됩니다 (연결이 isn '). 또 다른 장점은 클라이언트 쪽 코드가 필요없이 연결이 끊어지면 자동으로 다시 연결된다는 것입니다. 이것은 즉각적입니다.

웹 소켓은 이러한 모든 옵션 중에서 가장 좋습니다. 단 하나의 연결 만 있으면되고 이중화이기 때문에 메시지를받을 수있을뿐만 아니라 메시지를 보낼 때마다 별도로 서버에 연결해야하는 대신 메시지를 보낼 수도 있습니다. Server-Sent Events와 달리 좀 더 많은 코드가 필요합니다. 즉, 연결이 끊어지고 서버 측 구현이 일반적으로 더 복잡하면 자동으로 다시 연결되지 않습니다. 나는 또한 당신이 아파치/XAMPP와 함께 사용할 수 있는지 잘 모르겠다. 이것은 즉각적입니다.

Socket.io는 (거의 모든) 이들과 일부 (예 : 플래시 소켓)를 지원하고 멋진 API를 추상화하여 브라우저 지원의 특이성을 처리 할 필요가없는 라이브러리입니다 그들 각각을 위해. 사용하는 전송 속도가 빠르며 실행중인 브라우저에 따라 다릅니다. 또한 작성해야하는 코드의 양을 줄일 수 있습니다. 그러나 너무 복잡하기 때문에 오래된 브라우저를 신경 쓰지 않는다면 반드시 필요한 것은 아닙니다. 또한, 그것은 정말로 독자적으로 실행되는 것을 좋아합니다. XAMPP에 프록시 할 수도 있지만, Apache 으로 WebSocket을 전달하도록 구성 할 수 있는지 여부는 알 수 없습니다.

+0

자세한 답변 해 주셔서 감사합니다. 제 질문의 70 %가 답변되었습니다. 나머지 30 %는 속도 (순간 지연/시간 초과) 및 가능한 경우 설명에 대한 옵션의 간단한 목록입니다. 추가 할 수 있다면 답변으로 표시하겠습니다. –

+0

수정 된 답변을 보내 주셔서 감사합니다. - SSE와 같이 보입니다. –

관련 문제