HTML5 có cho phép các ứng dụng web tạo kết nối HTTP ngang hàng không?


100

Có thể tạo một ứng dụng web, với sự trợ giúp của máy chủ trung tâm, có thể tạo kết nối trực tiếp với những người dùng khác của cùng một ứng dụng web không? Tôi đang tưởng tượng một quá trình tương tự như việc đục lỗ UDP.

Tôi đã đọc về API WebSockets mới trong HTML5, nhưng có vẻ như bạn phải bắt đầu kết nối với máy chủ tương thích với WS trước khi kết nối song công hoàn toàn có thể bắt đầu. Tôi cũng đang nghĩ nhiều hơn về một quy trình để tạo kết nối trực tiếp giữa các máy khách, với một máy chủ chỉ tham gia vào lần bắt tay đầu tiên.

LƯU Ý: Các ứng dụng Java không được tính. Tôi chỉ quan tâm đến các công nghệ trình duyệt tiêu chuẩn.


Câu trả lời:


109

Thay vì những phỏng đoán thông minh, đây là một câu trả lời sáng suốt:

HTML 5 có kế hoạch cho phép các kết nối ngang hàng từ javascript, nhưng các kết nối này SẼ KHÔNG LÀ TCP RAW.

Thông số kỹ thuật đầy đủ có thể được tìm thấy tại http://dev.w3.org/html5/websockets/

jrh

CHỈNH SỬA: với tham chiếu cụ thể đến các kết nối ngang hàng, hãy xem các liên kết sau:

Điều quan trọng cần lưu ý là các khả năng vẫn đang được thương lượng. Sẽ rất tuyệt nếu có thể tạo ứng dụng web "trò chuyện cục bộ" :)

jrh


45
1 => "Thay vì suy đoán thông minh, đây là một câu trả lời thông báo"
Ionuţ G. Stan

2
WebSocket có cho phép kết nối với BẤT KỲ máy chủ nào không? Tôi tin rằng thông số kỹ thuật chỉ cho máy chủ.
bá chủ

4
Web Sockets không còn là một phần của HTML5 nữa, mà là một đặc điểm kỹ thuật độc lập.
Sergey Ilinsky

8
WebSockets không ngang hàng - chúng vẫn là máy khách với máy chủ và các trình duyệt không triển khai nửa máy chủ.
Alnitak

4
webSockets không hoạt động ngang hàng, nhưng một thông số kỹ thuật mới hơn, WebRTC, được thiết kế cho việc này.
Eric Mill

29

CẬP NHẬT 17/10/2012: Chức năng này hiện đã tồn tại trong Chrome Stable v22. Để sử dụng chức năng này trong Chrome, người ta phải bật hai cờ trong chrome: // flags:

  • Bật MediaStream
  • Bật PeerConnection

Sau đó, bạn có thể truy cập Trang Demo AppRTC để thử bản demo. Xem WebRTC - Chạy trang Demos để biết thêm hướng dẫn chi tiết về cách thiết lập Chrome để sử dụng chức năng ngang hàng và cho phép chụp thiết bị.


CẬP NHẬT: Các kỹ sư tại Ericcson Labs có bằng chứng về khái niệm trong bản dựng WebKit thực hiện Video hội thoại ngang hàng HTML5 .

Họ có những minh chứng trong blog của họ về công nghệ đang hoạt động, cũng như các sơ đồ và giải thích về cách công nghệ sẽ hoạt động.

Họ đang làm việc để làm cho điều này ổn định và cam kết với kho lưu trữ WebKit.


Bạn ước tính nó sẽ mất bao lâu trước khi nó có trong WebKit?
Alistair

Tôi không biết. Tôi đề nghị kiểm tra với Ericcson. Liên kết có trong câu trả lời của tôi. Diễn đàn của họ có thể có thông tin về thời điểm đó.
jmort253,

Yêu cầu cài đặt cờ / cấu hình đặc biệt cho mỗi trình duyệt không giống như là một phần của thông số tiêu chuẩn web đang hoạt động. Nếu nó không có trong HTML5, WebSockets hoặc WebRTC out-of-the-box, thì bạn không thể thực hiện peer-to-peer mà không có hack. May mắn thay, có vẻ như WebRTC đang đi đúng hướng.
Beejor

11

Vâng, cuối cùng.

Kể từ khi viết bài này (2017), WebRTC hiện là một phần tiêu chuẩn của hầu hết các trình duyệt hiện đại (khoảng 70% trình duyệt đang được sử dụng) và cho phép phát trực tuyến đa phương tiện, ngang hàng và đục lỗ.

Bạn có thể tìm thấy tài liệu, mã mẫu và ví dụ trực tiếp cho WebRTC tại html5rocks.com .

Theo caniuse.comhtml5rocks.com , các trình duyệt sau hỗ trợ WebRTC:

Hỗ trợ đầy đủ: Edge 14, Firefox 22, Firefox Android 55
Hỗ trợ một phần: Trình duyệt Android 56, Chrome 20, Chrome Android 29, Edge 12, Firefox 17, Opera 18, Opera Android 20, Opera Mobile 12, UC Browser Android 11.4
Hỗ trợ trong tương lai ( Q3 2017): Chrome dành cho iOS 11, Safari 11 dành cho iOS 11 và OS X 10.11
Không hỗ trợ: IE, IE Mobile, Opera Mini

Tỷ lệ bão hòa của WebRTC bị giới hạn trên các thiết bị của Apple, vì Safari 11 chưa được phát hành và yêu cầu iOS 11 hoặc OS X 10.11. Mặc dù dự đoán từ các xu hướng nâng cấp trong quá khứ, nhưng WebRTC sẽ khả dụng trên khoảng 75% thiết bị iOS vào năm 2018 và 100% vào năm 2020.


4

Có một số lý do tại sao điều này sẽ phức tạp:

  1. Tường lửa (thậm chí chỉ là NAT đơn thuần) sẽ khiến loại kết nối này khó khăn ở lớp giao thức thấp hơn nhiều so với HTTP. Với chiếc mũ bảo mật CNTT của tôi, đây có vẻ như là một cách tuyệt vời để mở các cổng tùy ý trên máy, chỉ bằng cách truy cập vào một trang web - và vì vậy nó sẽ bị chặn mạnh bởi hầu như tất cả các hệ thống CNTT của công ty.
  2. HTTP vốn dĩ là một giao thức khách-máy chủ. Mặc dù có thể dễ dàng mô phỏng truyền thông song công bằng cách sử dụng thăm dò dài (cũng như một vài kỹ thuật khác), nhưng nó không đặc biệt hiệu quả.
  3. Điều này sẽ mở ra một lỗ hổng lớn cho các cuộc tấn công XSS.

WebSockets được thiết kế để giải quyết vấn đề thứ hai trong số những vấn đề này, nhưng (tôi mong đợi) không phải là hai vấn đề còn lại. Khi họ nói về peer-to-peer trong thông số kỹ thuật HTML5, họ đang nói về truyền thông song công giữa máy chủ và máy khách, không phải giữa máy khách này với máy khách khác.

Tuy nhiên, sẽ rất đơn giản để triển khai một ngăn xếp mạng thích hợp trên đầu các ổ cắm web - với điều kiện là tất cả giao tiếp vẫn phải được thực hiện thông qua máy chủ. Tôi đã thấy điều này được thực hiện bằng cách sử dụng bỏ phiếu dài (một người bạn của tôi ở Uni đã viết một ngăn xếp TCP / IP đầy đủ bằng cách sử dụng bỏ phiếu dài).


P2P không phải là máy khách-máy chủ; cái trước di chuyển lưu lượng truy cập giữa các đồng nghiệp, cái sau di chuyển nó qua máy chủ đến một hoặc nhiều máy khách. Lợi ích chính của P2P là máy chủ có thể hoạt động như một người mai mối trong khi lưu lượng truy cập lớn đi giữa các máy khách (đó là một lợi ích cho quyền riêng tư và băng thông).
Beejor

0

Tôi thứ hai harshath.jr: bạn rất có thể có một máy chủ hoạt động như một thư mục (hiển thị "nguồn gốc" của mỗi tác nhân được kết nối; nguồn gốc là lược đồ + máy chủ + cổng như trong bản nháp-abarth-origin , với lược đồ là "ws" hoặc "wss"). Sau đó, bạn có thể bắt đầu các kết nối WebSocket ngang hàng; các SOP được làm việc thông qua nhờ CORS . Tất nhiên, điều này có nghĩa là mỗi tác nhân (tức là trình duyệt) sẽ phải nhúng máy chủ WebSocket của riêng mình (à la Opera Unite).

Trong thời gian này, hãy thực hiện theo cách XMPP / IRC / v.v.: không có kết nối ngang hàng nhưng kết nối WebSocket với máy chủ trung tâm (hoặc mạng!) Để chuyển thông báo đến các tác nhân được kết nối (cuối cùng sử dụng một số WebSocket cụ thể " giao thức con ")

CHỈNH SỬA: lưu ý rằng tất cả những điều này thực sự nằm ngoài phạm vi của HTML5 (tất cả những thứ đó đã từng là một phần của HTML5 nhưng đã được tách thành các thông số kỹ thuật của riêng chúng)


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.