2011-08-11 27 views
59

Làm thế nào tôi có thể viết một trang web sử dụng HTML5 , CSSJavascript về phía khách hàng mà sẽ cho phép kết nối tcp trực tiếp/ip giữa các trình duyệt khách hàng khi trang web được tải.Tôi làm cách nào để kết nối với trình duyệt (ngang hàng)?

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

Tôi đã đọc các bài đăng trước đó về chủ đề này nhưng không có giải pháp/ví dụ làm việc có sẵn 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 khách hàng có thể được thực hiện bằng cách sử dụ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.

+2

WebRTC được mà không cần tín hiệu máy chủ: http://blog.printf.net/articles/2013/05/17/webrtc-without-a-signaling-server/ – danijar

+0

Đồng thời xem [PeerJS] (http: // peerjs.com /), một dự án với một số lực kéo trong lĩnh vực này, có [hỗ trợ trình duyệt] tương đối phong nha (http://peerjs.com/status/). – Boaz

+0

Cách đơn giản nhất là sử dụng các cuộc gọi http://httprelay.io và AJAX. Đó là nhanh chóng, ít hơn 50ms. – Jonas

Trả lời

101

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

  1. Will HTML5 allow web apps to make peer-to-peer HTTP connections?
  2. What techniques are available to do P2P in the browser?
  3. Does HTML5 Support Peer-to-Peer (and not just WebSockets)
  4. Can HTML5 Websockets connect 2 clients (browsers) directly without using a server (P2P)
  5. Is it possible to create peer-to-peer connections in a web browser?
  6. Do websockets allow for p2p (browser to browser) communication?
  7. HTML 5 Peer to Peer Video Possibilities?
  8. Is WebRTC implemented in any browsers yet?

Như đã đề cập ở hầu hết các topicts, cả năm 2008 dự thảo HTML5 làm việc đã có một phần "kết nối Peer-to-peer":

Kể từ lần thứ e W3C Working Draft 12 February 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.Đó là trở lại dưới sự PeerConnection tên trong (Real-Time Communications) thông số kỹ thuật WebRT:

Kể từ 31 tháng 10 năm 2011, W3C biên tập viên Bản nháp là bản nháp làm việc chính thức:

Việc thực hiện duy nhất của PeerConnection (dựa trên UDP) tồn tại trong WebKit sửa đổi bởi phòng thí nghiệm của Ericsson (tháng 5 năm 2011), hoạt động khá tốt. Một số bản vá lỗi là trong WebKit bây giờ (tháng 10 năm 2011 - xem các cập nhật dưới đây!):

Bên cạnh đó, các sáng kiến ​​WebRT là một dự án của Google, Mozilla và Opera. Vì vậy, họ đang tiếp tục các đặc điểm kỹ thuật trên PeerConnection:

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

Kể từ ngày 18 tháng 1 năm 2012, Chrome is supporting WebRTC as well. Nó có thể được sử dụng trong Dev channel (Windows, OSX, Linux) and the Canary build (Windows and OSX) bởi enabling it under chrome://flags. Nó chỉ hỗ trợ MediaStream như Video và âm thanh và có thể được kiểm tra với một số Demos. Việc chuyển dữ liệu ứng dụng như String/ArrayBuffer/... không được hỗ trợ cho đến bây giờ.

Kể từ 16th March 2012, the WebRTC Editor's Draft tách "Peer-to-peer Data API" để gửi và nhận dữ liệu ứng dụng chung (String, ArrayBufferBlob). Chromium wants to implement the Data API soon (ngày 10 tháng 4 năm 2012).

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

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

+10

Đây là năm 2014 ở đây, Bạn có thể cập nhật bài đăng tuyệt vời của mình với tiến trình gần đây không? – myroslav

+1

@myroslav http://www.webrtc.org/interop là một nơi tốt để bắt đầu. Bởi bây giờ Firefox, Chrome và Opera cung cấp hỗ trợ đầy đủ và có thể tương thích với bộ điều hợp đầy đủ. – msemelman

+0

Bạn có thể vui lòng cập nhật bài đăng tuyệt vời của mình với tiến độ gần đây không! – Abderrahim

6

Tôi sẽ phải làm bạn thất vọng - điều này hiện tại không thể thực hiện chỉ với JavaScript. Websockets (và Socket.IO) cho phép một kết nối giống như socket giữa máy khách và máy chủ, nhưng không cho phép 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.

+0

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? từ những gì nói trên wikipedia nó nghe như nó có thể: "WebSocket là một công nghệ cung cấp các kênh truyền thông hai chiều, song công, qua một ổ cắm Giao thức Điều khiển Truyền (TCP) duy nhất. Nó được thiết kế để được thực hiện trong các trình duyệt web và web máy chủ, 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. " –

+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 ở chế độ song công hoàn toàn, nhưng người tiêu dùng của bạn không thể trở thành máy chủ. Ngoài ra, bạn sẽ gặp phải một 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

+0

Về mặt kỹ thuật, các ổ cắm web có thể được sử dụng ở mọi nơi. Nhưng trong trình duyệt, do những ràng buộc 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ể ** nhanh hơn **, vì thường các máy chủ được đặt ở những nơi có dung lượng băng thông rất lớn, vì vậy máy chủ của bạn sẽ xử lý 100 máy khách tốt, trong khi sử dụng p2p thực, bạn sẽ làm ướt kết nối người dùng rất nhanh. –

2

Tôi muốn chuyển sự chú ý của bạn sang thực tế, hầu hết người dùng ngày nay đều ở phía 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 sự phức tạp hơn cho giải pháp của bạn. Vì vậy, hệ thống máy chủ-khách hàng có thể kết nối liên tục (sử dụng websockets hoặc socket.io) là một lựa chọn tốt hơn.

Các vấn đề liên quan