Làm cách nào để tạo kết nối trình duyệt với trình duyệt (ngang hàng)? [đóng cửa]


83

Làm cách nào tôi có thể viết một trang web bằng HTML5 , CSSJavaScript ở phía máy khách để cho phép kết nối tcp / ip trực tiếp giữa các trình duyệt máy khách sau khi trang được tải .

Tôi cần làm điều này để giảm độ trễ vì trang web sẽ yêu cầu dữ liệu đầu vào từ một trong những người dùng phải được truyền đến người dùng khác càng sớm càng tốt, vì vậy việc gửi dữ liệu từ máy khách A đến Máy chủ rồi đến máy khách B là không tốt Lựa chọn.

Tôi đã đọc các bài viết trước đây về chủ đề này nhưng không có giải pháp / ví dụ nào hiệu quả mà tôi có thể tìm thấy. Từ những gì tôi đọc, kết nối trực tiếp giữa các máy khách có thể được thực hiện bằng các plugin như Silverlight, Java hoặc Flash.

Có giải pháp nào không yêu cầu plugin không? Tôi chỉ muốn sử dụng JavaScript.


3
Kết nối ngang hàng WebRTC được mà không cần tín hiệu máy chủ: blog.printf.net/articles/2013/05/17/...
danijar

1
Cũng hãy xem PeerJS , một dự án có sức hút nhất định trong lĩnh vực này, có hỗ trợ trình duyệt tương đối tốt .
Boaz

1
Cách đơn giản nhất là sử dụng lệnh gọi httprelay.io và AJAX. Nó nhanh, ít hơn 50ms.
Jonas

Câu trả lời:


126

Dưới đây trên Stackoverflow là một số chủ đề về kết nối P2P trong trình duyệt:

  1. HTML5 có cho phép các ứng dụng web tạo kết nối HTTP ngang hàng không?
  2. Những kỹ thuật nào có sẵn để thực hiện P2P trong trình duyệt?
  3. HTML5 có hỗ trợ Peer-to-Peer (và không chỉ WebSockets)
  4. HTML5 Websockets có thể kết nối trực tiếp 2 máy khách (trình duyệt) mà không cần sử dụng máy chủ (P2P) không
  5. Có thể tạo kết nối ngang hàng trong trình duyệt web không?
  6. Websockets có cho phép giao tiếp p2p (trình duyệt với trình duyệt) không?
  7. HTML 5 Khả năng Video ngang hàng?
  8. WebRTC đã được triển khai trên bất kỳ trình duyệt nào chưa?

Như đã đề cập trong hầu hết các topicts, cả hai bản nháp làm việc HTML5 năm 2008 đều có phần "Kết nối ngang hàng":

Kể từ Dự thảo làm việc của W3C ngày 12 tháng 2 năm 2009 , phần "Kết nối ngang hàng" đã biến mất. Nhưng kết nối P2P này không biến mất. Nó trở lại dưới tên PeerConnection trong thông số kỹ thuật của WebRTC (Giao tiếp thời gian thực):

Kể từ ngày 31 tháng 10 năm 2011, Bản thảo của Biên tập viên W3C là bản dự thảo Hoạt động chính thức:

Việc triển khai PeerConnection (dựa trên UDP) duy nhất tồn tại trong WebKit đã được sửa đổi bởi phòng thí nghiệm Ericsson (tháng 5 năm 2011), đang hoạt động khá tốt. Một số bản vá hiện có trong WebKit (tháng 10 năm 2011 - xem bản cập nhật bên dưới!):

Ngoài ra, sáng kiến ​​WebRTC là một dự án của Google, Mozilla và Opera. Do đó, họ đang tiếp tục đặc tả trên PeerConnection:

Có lẽ Chrome (sử dụng WebKit) sẽ là trình duyệt chính đầu tiên hỗ trợ WebRTC với PeerConnection:

Kể từ ngày 18 tháng 1 năm 2012, Chrome cũng đang hỗ trợ WebRTC . Nó có thể được sử dụng trong kênh Dev (Windows, OSX, Linux) và bản dựng Canary (Windows và OSX) bằng cách bật nó trongchrome://flags . Nó chỉ hỗ trợ MediaStreamnhư Video và âm thanh và có thể được thử nghiệm với một số bản Demo . Tính năng chuyển dữ liệu ứng dụng như String/ ArrayBuffer/ ... không được hỗ trợ cho đến nay.

Kể từ ngày 16 Tháng 3 năm 2012, Dự thảo các WebRTC của biên tập viên tách một "Peer-to-peer API dữ liệu" để gửi và nhận dữ liệu ứng dụng generic ( String, ArrayBufferBlob). Chromium muốn sớm triển khai API dữ liệu (ngày 10 tháng 4 năm 2012).

Vào ngày 3 tháng 4, Mozilla cũng đã xuất bản một ví dụ hoạt động đầu tiên trên WebRTC cho Firefox .

DataChannel được lên kế hoạch cho phiên bản 25 của Chrome, sau một lá cờ, trong khi đó nó có thể được thử nghiệm trong Firefox Nightly / Aurora (ngày 12 tháng 12 năm 2012):

2018: DataChannels vẫn đang thử nghiệm, nhưng có sẵn trong các phiên bản hiện tại của Chrome và Firefox:


11
Bây giờ là năm 2014 ở đây, Bạn có thể cập nhật bài viết xuất sắc của mình với tiến độ gần đây không?
myroslav,

1
@myroslav webrtc.org/interop là một nơi tốt để bắt đầu. Hiện Firefox, Chrome và Opera đã hỗ trợ đầy đủ và có thể tương tác với các bộ điều hợp thích hợp.
msemelman

1
Tôi sẽ làm nó sớm!
Dennis

2
đây là năm 2016 ở Úc. Chúng tôi có thể có các liên kết mới nhất cho trình duyệt ngang hàng không?
Ganesh Krishnan

1
Vâng, còn bản cập nhật đó thì sao?
obskyr

6

Tôi sẽ phải làm bạn thất vọng - điều này hiện không thể thực hiện được chỉ với JavaScript. Websockets (và Socket.IO) cho phép kết nối giống như socket giữa máy khách và máy chủ, nhưng không phải giữa các máy khách. Tùy chọn của bạn là một plugin - có thể là Flash, Silverlight, Java hoặc tùy chỉnh.

Những gì bạn có thể làm là sử dụng socket.io và mô phỏng điều đó bằng cách viết một máy chủ proxy đơn giản.


bạn có chắc chắn rằng WebSocket không cho phép p2p trực tiếp giữa 2 trình duyệt không? từ những gì nói trên wikipedia thì có vẻ như nó có thể: "WebSocket là công nghệ cung cấp các kênh truyền thông song công, hai chiều, qua một ổ cắm Giao thức điều khiển truyền (TCP) duy nhất. Nó được thiết kế để triển khai trong các trình duyệt web và web nhưng nó có thể được sử dụng bởi bất kỳ ứng dụng máy khách hoặc máy chủ nào. "
Răzvan Flavius ​​Panda,

5
Sự cố được giải quyết nếu bạn không thể có trình duyệt LISTEN/ hoạt động như một máy chủ. Bạn sẽ có thể giao tiếp với bất kỳ máy chủ nào trong chế độ song công, nhưng khách hàng của bạn không thể trở thành máy chủ. Ngoài ra, bạn sẽ gặp phải hàng triệu vấn đề với tường lửa nếu có thể. Giải pháp của Emil sẽ hoạt động tốt hơn, mặc dù chậm hơn.
ghayes

Về mặt kỹ thuật, websockets có thể được sử dụng ở mọi nơi. Nhưng trong các trình duyệt, do các hạn chế về bảo mật, điều này sẽ không xảy ra. ghayes giải thích nó. Ngoài ra, lưu ý rằng giải pháp này có thể sẽ nhanh hơn , vì thường máy chủ được đặt ở những nơi có dung lượng băng thông lớn, vì vậy máy chủ của bạn sẽ xử lý tốt 100 máy khách, trong khi sử dụng p2p thực, bạn sẽ bão hòa kết nối người dùng rất nhanh.
Emil Ivanov

@Emil Ivanov: Đúng như những gì bạn đang nói nhưng nếu đó chỉ là kết nối 1to1 thì sẽ nhanh hơn.
Răzvan Flavius ​​Panda

3

Tôi muốn chuyển sự chú ý của bạn đến thực tế là hầu hết người dùng ngày nay đều đứng sau NAT hoặc tường lửa, và điều này có nghĩa là bạn không thể dễ dàng thiết lập kết nối đến máy tính của người dùng. Vì vậy, ý tưởng của bạn sẽ (nếu có thể) chỉ hoạt động trong một số trường hợp và sẽ mang lại thêm sự phức tạp cho giải pháp của bạn. Vì vậy, hệ thống máy khách-máy chủ với kết nối có thể liên tục (sử dụng websockets hoặc socket.io) là một lựa chọn tốt hơn.

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.