2013-09-24 56 views
5

Tôi là người mới trong thế giới WebRTC và Websockets. Tôi quan tâm đến việc tạo ra một trò chơi web 1 vs 1. Vấn đề chỉ là: Làm thế nào để gửi các biến đơn giản (chủ yếu là số) từ một khách hàng đến ứng dụng khách khác?Websockets nhanh hơn WebRTC?

Tôi có máy chủ Node.js với ổ cắm web (qua socket.io). Vì vậy, đối với các khách hàng, tôi có hai giải pháp:

  • Sử dụng Websockets: Các khách hàng 1 push var đến máy chủ và máy chủ đẩy var cho khách hàng 2. Giải pháp này cho phép tôi để dễ dàng thích nghi với ứng dụng của tôi cho nhiều người dùng trong một trò chơi.
  • Sử dụng WebRTC: Phiếu mua hàng và câu trả lời được sended qua máy chủ có ổ cắm web. Sau đó, máy khách 1 đẩy biến đổi đến máy khách 2 thông qua DataChannel (Tôi không cần getUserData)

Tôi thích sử dụng WebRTC hơn vì nó giúp giảm bớt công việc của máy chủ. Vì vậy, tôi đã thiết lập hai giải pháp để so sánh và, bất ngờ lớn! Websockets nhanh hơn rất nhiều so với WebRTC!

Thử nghiệm của tôi rất đơn giản: chỉ cần xoay khối bằng cách sử dụng Three.js, khách hàng đầu tiên thực hiện xoay vòng tại mỗi khung hình (60 mỗi giây) và đẩy kết quả xoay tới máy khách 2. Tại quầy tiếp tân, máy khách 2 cập nhật xoay và kết xuất.

Với Websockets, kết quả là hoàn hảo nhưng với WebRTC, client 2 chạy rất chậm, như 5 FPS.

Có phải vấn đề là cách tôi đang thực hiện không? Nó có bình thường không ? Tôi đang làm việc trên máy chủ cục bộ, trên Firefox.

Trả lời

8

Sự cố xảy ra với WebRTC. Triển khai DataChannel WebRTC trên Chrome (có thể tương tự với firefox) được giới hạn ở khoảng 30 kbps. Tôi không biết lý do tại sao? Một cái gì đó về không lũ lụt internet. Có một hack để phá vỡ giới hạn này - bằng tay thay đổi "B =" nộp trong SDP trước khi thiết lập nó.

Tuy nhiên ... WebRTC là thông tin liên lạc P2p UNRELIABLE. Điều này có nghĩa là bạn phải cẩn thận hơn để đảm bảo rằng không có tin nhắn nào bị mất và hai người chơi quan sát cùng một sự kiện và môi trường. Tôi sẽ đi với websockets chỉ vì họ dễ dàng hơn nhiều, hiểu và hỗ trợ. Nếu trò chơi lan truyền, tôi sẽ coi WebRTC là một tối ưu hóa có thể.

Tuy nhiên nếu bạn đang làm trò chơi này chỉ để cho vui thì bạn sẽ học được rất nhiều thứ hữu ích nếu bạn chọn WebRTC.

Nếu bạn muốn xem một ví dụ như thế nào WebRTC được được sử dụng trong các dự án thực có một cái nhìn tại địa chỉ: http://viblast.com/demo

NB! Sau khi giới thiệu các kênh dữ liệu dựa trên SCTP vào khoảng thời gian 31-32 của Chrome, không có điều chỉnh băng thông nữa và có một chế độ hoạt động mới cho phép các kênh dữ liệu đáng tin cậy.

+1

Từ Chrome 31, SCTP được sử dụng theo mặc định, giống như trong Firefox, cho phép các kênh dữ liệu tin cậy - mặc dù, trên thực tế, thực tế có rất ít gói bị lỗi với giao thông không đáng tin cậy. Ngoài ra, như tôi hiểu nó, SCTP có nghĩa là kiểm soát tắc nghẽn động, không phải là một giới hạn cố định về băng thông. –

+0

@SamDutton điều này thực sự nhắc tôi về một vấn đề khác với WebRTC: Nó vẫn còn trong giai đoạn trứng nước và API và thay đổi hành vi không phải là hiếm. –

+0

Woah, cảm ơn bạn!Thực sự, đó là chính xác những gì tôi đã tìm kiếm rất nhiều lần mà không có bất kỳ kết quả nào. – Bambou