2013-06-03 3 views
1

우리는 웹 소켓 기술을 사용하여 HTML5 기반 채팅 응용 프로그램을 만들 계획이었습니다.실시간 채팅 앱용 HTML5 웹 소켓?

그래서 제 질문은 :

오늘로 기본적으로 현재 WebSocket을를 지원하는 브라우저가
  1. ?

  2. 브라우저에서 지원하지 않는 경우 가능한 대체 방식은 무엇입니까?

  3. 도울 수있는 polyfill이 있습니까? NullPoiиteя 및 Orangepill 지적

감사합니다,

+2

모든 주요 브라우저 지원 웹 소켓 http://caniuse.com/websockets 및 검사 할 브라우저에서 링크를 열 볼 http://websocketstest.com/ –

+0

http://html5please.com/#Websockets – Orangepill

답변

12

을 개발하는 데 도움이 희망?

이전 답변에서 지적한 바와 같이.

은 참조 :

브라우저를 지원하지 않는 경우, 가능한 우아한 대체 무엇인가?당신의 실시간 웹 서버 는 WebSocket을 지원하는 경우

는 다음 최선의 선택은 그것이이 기본 WebSocket 객체와 같은 방법으로 상호 작용가 수 WebSocket 객체를 생성하는 플래시 기반 polyfill의 web-socket-js을 사용하는 것입니다 . 단일 스트리밍 연결 -

  1. EventSource :

    추가 폴백 (fallback) - - 그것은 제공하는 자바 스크립트 클라이언트 라이브러리하여 ​​실시간으로 웹 서버에서 지원하고 관리 할 필요가 는 최악의 최고의 정렬 서버 -> 클라이언트. 양방향 통신은 두 번째 HTTP 요청을 사용하여 수행 할 수 있습니다.

  2. HTTP 스트리밍 - 두 개의 연결을 사용하여 양방향 연결을 시뮬레이션합니다. 메시지는 영구 '스트리밍'연결 서버 -> 클라이언트를 통해 '푸시됩니다'
  3. HTTP 긴 폴링 - 두 개의 연결도 사용합니다. 그러나 새 메시지를 사용할 수 있거나 시간 초과가 발생할 때까지 server -> client가 열립니다. 그러면 닫히고 데이터가 설정되면 응답으로 전달됩니다.
  4. 표준 HTTP 폴링 - 잠재적으로 낭비되는 요청이 많기 때문에 효율적이지 않고 훨씬 효율적입니다. 그러나 앱이 제공하는 업데이트가 그다지 자주 발생하지 않고 요청이 폴링되는 시점에서 데이터가 만료 된 경우 문제가되지 않는다면 이는 수용 가능한 해결책 일 수 있습니다. 여기에는 '밀어 넣기'가 없습니다.

옵션 1. 및 2.는 웹 브라우저에 따라 다양한 방법으로 얻을 수 있습니다. 이것은 그들이 '해킹'하게 만드는 것입니다. 이제 우리는 양방향 통신을위한 WebSocket과 HTTPS와 매우 유사한 EventSource (서버 전송 이벤트)를 가지고 있으며, 자동 재 연결을 지원하는 이점이 추가되었습니다.

도울 수있는 polyfill이 있습니까?

예, 앞에서 언급 한대로 web-socket-js을 참조하십시오.

PHP의 경우 가장 좋은 선택은 Ratchet입니다. 아파치 내에서 실행되지 않기 때문에 동일한 제한 사항을 겪지 않습니다. 요청/응답 패러다임을 염두에두고 구축되지 않았습니다. 내가 지금보고

가장 일반적으로 사용되는 솔루션은 다음과 같습니다

  • Faye - Node.js를하고 루비
  • socket.io - 다양한 언어
  • SockJS을위한 Node.js를하고 사용 가능한 포트 - 얼랑, node.js, ruby ​​
  • SignalR - .NET
  • XSockets -.(내가 글을 쓰는 시점에서 작동) Pusher 같은 호스팅 서비스를 포함하여 - - 다른 옵션에 대한

NET 나는 유지 (그리고쪽으로 기여를 수용)하고있어이 realtime web tech guide를보십시오.

1

으로, 당신은 caniusehtml5please 볼 수 있었다. 그래서 그것이 첫 번째 포인트/

두 번째와 세 번째 포인트는 대체 옵션입니다. 폴링을 사용할 수 있습니다. (자세한 내용은 answer 참조).

글쎄,이 질문은 아니지만 당신이 고려해야 포인트 (때문에 PHP에서 태그). 웹 소켓은 사용자가 활성화되어있는 동안 활성 연결을 유지합니다. PHP는 이것에 대한 것이 아니므로 서버가 연결에 넘치고 나쁜 의미를 지닌 사람이 서버가 넘쳐나는지 쉽게 확인할 수 있습니다.

원하는 경우 시간 초과 제한을 0으로 설정해야하기 때문에 (결코 사용하지 않음) 때문입니다. 따라서 서버는 요청이 가득 찰 때까지 요청을 쌓습니다. (연결이 어떻게 작동하는지 모름).

웹 소켓과 PHP를 사용하지 않으려면 pusher을보아야합니다. 내 자신의 채팅을 위해이 서비스를 사용했습니다. 그것은 마술처럼 작동하고 모든 어려운 것들을 당신에게서 멀리합니다.

나는 정보를 당신이 nive 응용 프로그램 오늘로 기본적으로 현재 WebSocket을을 지원하는 브라우저가

+0

푸셔가 지급되며 전 서버에 전체 내용을 넣을 수있는 방법을 찾고있었습니다. 그래서 네, 현재 socket.io을 찾고 있습니다. –

+0

그리고 PHP는 모든 종류의 문제를 일으킬 것이라고 생각합니다. 푸시 서비스가 사용하는 것과 같은 메모리 손실을 막는 방법이 있는지 궁금합니다. –

+0

당신이 할 수있는 일은 웹 소켓과 폴링을 사용하는 것입니다. 이상적이지는 않지만 통신을 위해 websocket을 사용하고 폴링은 매 시간마다 메시지를 보내고 수신하지 않으면 연결이 비게됩니다. 다시는 이상적이지 않습니다. PHP는 이러한 종류의 의사 소통을 위해 만들어지지 않았습니다. – MKroeders

0

Faye는 놀랍습니다. Pusher를 좋아하지만 구현하기가 쉽고 구현하기가 쉬운 서버가 필요했습니다. Node.js를 배우기 시작한 후 나는 Faye에게 깊은 인상을 받았습니다. 그것은 웹 소켓, http에 대한 큰 지원을 제공하지만 나는 당신이 Bayeux 프로토콜을 사용할 수있는 것을 좋아한다.

http://faye.jcoglan.com/node.html

0

당신은 당신이 처음부터 시작하는 최고의 자원을 많이 찾을 수 있습니다 또한 시작하기에 좋은 장소 Node.js를를 사용할 수있는 학습을 위해 그것을 만들 실 거예요 경우 .

하지만 나에게 나는 comentication을위한 PHP 웹 소켓 서버를 사용하고 을위한 자바 스크립트를 선호한다. official PHP site의 도움으로 웹 소켓 서버를 빌드 할 수있다.

+0

PHP가 메모리 문제가있는 WebSocket 서버를 만드는 것이 좋다고 생각합니까? –

+0

(메모리 문제)를 정의하십시오, 당신이 만들지 않을 앱의 유형에 달렸습니다. –