HTML5를 사용하면 웹 앱이 P2P HTTP 연결을 만들 수 있습니까?


100

중앙 서버의 도움으로 동일한 웹 앱의 다른 사용자와 직접 연결을 만들 수있는 웹 앱을 만들 수 있습니까? UDP 홀 펀칭과 유사한 프로세스를 상상하고 있습니다.

HTML5의 새로운 WebSockets API에 대해 읽었지만 전이중 연결을 시작하기 전에 WS 호환 서버와의 연결을 시작해야합니다. 나는 서버가 초기 핸드 셰이크 에만 관여하는 클라이언트 간의 직접 연결을 만드는 프로세스에 대해 더 많이 생각하고 있습니다 .

참고 : Java 애플릿은 포함되지 않습니다. 표준 브라우저 기술에만 관심이 있습니다.


답변:


109

지능적인 추측 대신 정보에 입각 한 답변이 있습니다.

HTML 5는 자바 스크립트에서 피어 투 피어 연결을 허용 할 계획이지만 이러한 연결은 RAW TCP가 아닙니다.

전체 사양은 http://dev.w3.org/html5/websockets/ 에서 찾을 수 있습니다.

jrh

편집 : 피어 투 피어 연결에 대한 특정 참조와 함께 다음 링크를 확인하십시오.

기능이 여전히 협상 중이라는 점에 유의하는 것이 중요합니다. "로컬 채팅"웹 앱을 만들 수 있으면 좋을 것입니다. :)

jrh


45
1 => "대신 지능적인 추측으로, 여기에 정보를 대답은"
누트 G. 스탠

2
WebSocket은 모든 호스트에 연결할 수 있습니까? 사양은 서버 전용이라고 믿습니다.
hegemon 2009-06-23

4
웹 소켓은 더 이상 HTML5의 일부가 아니라 독립형 사양입니다.
Sergey Ilinsky

8
WebSocket은 피어 투 피어가 아닙니다. 여전히 클라이언트 투 서버이고 브라우저는 서버 절반을 구현하지 않습니다.
Alnitak

4
webSocket은 피어 투 피어를 수행하지 않지만 최신 사양 인 WebRTC가이를 위해 설계되었습니다.
Eric Mill

29

업데이트 10/17/2012 : 이 기능은 이제 Chrome Stable v22에 있습니다. Chrome에서이 기능을 사용하려면 chrome : // flags에서 두 개의 플래그를 활성화해야합니다.

  • MediaStream 활성화
  • PeerConnection 활성화

그런 다음 AppRTC 데모 페이지 를 방문하여 데모 를 사용해 볼 수 있습니다 . 피어 투 피어 기능을 사용하고 장치 캡처를 활성화하도록 Chrome을 설정하는 방법에 대한 자세한 지침 은 WebRTC-데모 실행 페이지를 참조하십시오.


업데이트 : Ericcson Labs의 엔지니어는 HTML5 피어 투 피어 대화식 비디오 를 수행하는 WebKit 빌드에 개념 증명을 가지고 있습니다 .

그들은 기술이 작동하는 방식에 대한 다이어그램과 설명뿐만 아니라 작동중인 기술에 대한 데모를 블로그에 게시합니다.

그들은 이것을 안정화시키고 WebKit 저장소에 커밋하기 위해 노력하고 있습니다.


이것이 WebKit에 들어가기까지 얼마나 걸립니까?
Alistair 2012

나도 몰라. Ericcson과 확인하는 것이 좋습니다. 링크는 내 대답에 있습니다. 그들의 포럼에는 그것이 언제 될지에 대한 정보가있을 수 있습니다.
jmort253

특별한 브라우저 별 구성 / 플래그 설정을 요구하는 것은 작동하는 웹 표준 사양의 일부가되는 것과 다릅니다. HTML5, WebSockets 또는 WebRTC 바로 사용할 수없는 경우 해킹 없이는 피어 투 피어를 수행 할 수 없습니다. 다행히 WebRTC가 올바른 방향으로 가고있는 것 같습니다.
Beejor

11

네, 드디어.

이 글을 쓰는 현재 (2017 년) WebRTC는 현재 대부분의 최신 브라우저 (사용중인 브라우저의 약 70 %)의 표준 부분이며 멀티미디어 스트리밍, P2P 및 홀 펀칭을 허용합니다.

WebRTC에 대한 문서, 샘플 코드 및 라이브 예제는 html5rocks.com 에서 찾을 수 있습니다 .

caniuse.comhtml5rocks.com 에 따르면 다음 브라우저는 WebRTC를 지원합니다.

전체 지원 : Edge 14, Firefox 22, Firefox Android 55
부분 지원 : Android 브라우저 56, Chrome 20, Chrome Android 29, Edge 12, Firefox 17, Opera 18, Opera Android 20, Opera Mobile 12, UC 브라우저 Android 11.4
향후 지원 ( 2017 년 3 분기) : iOS 11 용 Chrome, iOS 11 및 OS X 10.11 용 Safari 11
지원 없음 : IE, IE Mobile, Opera Mini

Safari 11이 아직 출시되지 않았고 iOS 11 또는 OS X 10.11이 필요하기 때문에 WebRTC의 포화 속도는 Apple 기기에서 제한됩니다. 과거의 업그레이드 추세에서 예상 할 수 있지만 WebRTC는 2018 년까지 약 75 %의 iOS 장치에서, 2020 년까지 100 %에서 사용할 수있을 것입니다.


4

이것이 까다로운 이유는 여러 가지가 있습니다.

  1. 방화벽 (일반 NAT 일지라도)은 HTTP보다 훨씬 낮은 프로토콜 계층에서 이러한 종류의 연결을 어렵게 만듭니다. 내 IT 보안 모자를 쓰고 있으면 웹 사이트를 방문하는 것만으로도 컴퓨터에서 임의의 포트를 여는 멋진 방법처럼 보이므로 사실상 모든 기업 IT 시스템에 의해 공격적으로 차단됩니다.
  2. HTTP는 본질적으로 클라이언트-서버 프로토콜입니다. 긴 폴링 (및 몇 가지 다른 기술)을 사용하여 이중 통신을 시뮬레이션하는 것은 합리적으로 쉽지만 특히 효율적이지는 않습니다.
  3. 이것은 XSS 공격을위한 큰 구멍을 열 것입니다.

WebSockets는 이러한 문제 중 두 번째 문제를 해결하도록 설계되었지만 다른 두 문제는 해결되지 않았습니다. HTML5 사양에서 피어 투 피어에 대해 이야기 할 때, 그들은 클라이언트와 다른 클라이언트 사이가 아니라 서버와 클라이언트 사이의 전이중 통신에 대해 이야기하고 있습니다.

그러나 웹 소켓 위에 적절한 네트워크 스택을 구현하는 것은 간단합니다. 단, 모든 통신은 여전히 ​​서버를 통해 수행되어야합니다. 나는 이것이 긴 폴링을 사용하여 수행되는 것을 보았습니다 (Uni의 친구가 긴 폴링을 사용하여 전체 TCP / IP 스택을 작성했습니다).


P2P는 클라이언트-서버가 아닙니다. 전자는 피어간에 트래픽을 이동하고 후자는 서버를 통해 하나 이상의 클라이언트로 트래픽을 이동합니다. P2P의 주요 이점은 서버가 중매 기 역할을 할 수있는 반면에 클라이언트간에 트래픽이 많을 수 있다는 것입니다 (개인 정보 보호 및 대역폭에 도움이 됨).
Beejor

0

두 번째로 harshath.jr : 디렉터리 역할을하는 서버를 가질 수 있습니다 (연결된 각 에이전트의 "원점"을 노출합니다. origin은 draft-abarth-origin 에서와 같이 scheme + host + port 이며, 스키마는 "ws"입니다.) 또는 "wss"). 그런 다음 피어 투 피어 WebSocket 연결을 시작할 수 있습니다. SOP는 덕분 통해 작업중인 CORS . 물론 이는 각 에이전트 (예 : 브라우저)가 자체 WebSocket 서버 (Opera Unite)를 포함해야 함을 의미합니다.

그 동안 XMPP / IRC / etc.-way : 피어 투 피어 연결은 없지만 중앙 서버 (또는 네트워크!)에 대한 WebSocket 연결을 통해 연결된 에이전트에 메시지를 전달합니다 (결국 특정 WebSocket 사용 " 하위 프로토콜 ")

편집 :이 모든 것이 실제로 HTML5의 범위를 벗어납니다 (이 모든 것들은 한때 HTML5의 일부 였지만 자체 사양으로 분리되었습니다).


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.