2012-04-22 32 views
6

Tôi muốn cho phép người dùng chơi p2p trong trò chơi nhiều người chơi mà tôi đang phát triển, nhưng để có thể làm điều đó, javascript cần có khả năng tạo máy chủ socket trong trình duyệt. Điều đó thậm chí có thể? Tôi không biết bất kỳ API nào cho phép khách hàng kết nối với các ứng dụng khách khác bằng javascript. Còn cách nào khác không? Giống như sử dụng một phần tử flash ẩn?Máy chủ Socket trong Javascript (trong trình duyệt)?

Tôi đang yêu cầu thứ gì đó không yêu cầu máy chủ. Các gói dữ liệu cần phải di chuyển từ khách hàng để khách hàng trực tiếp

+0

Hãy xem [websockets] (http://dev.w3.org/html5/websockets/) ([hướng dẫn] (http://net.tutsplus.com/tutorials/javascript-ajax/start-using -html5-websockets-today /)). Tuy nhiên, bạn sẽ cần một máy chủ socket, để tập trung truyền thông giữa các máy khách. Ngoài ra: hỗ trợ trình duyệt vẫn còn hạn chế. – bfavaretto

+0

Vâng, nhưng tôi cần p2p, cụ thể là không có máy chủ tập trung. –

+0

Vâng, đó là điều không thể. – bfavaretto

Trả lời

0

Trong khi đây là một câu hỏi mua sắm, tôi muốn nhìn vào APE

http://www.ape-project.org/

Ít nhất bạn có thể kiểm tra làm thế nào họ đã có cấu trúc nó .

+0

Nó đòi hỏi một phía máy chủ. Không phải những gì tôi muốn. –

0

Để thực hiện trò chơi như vậy, ứng dụng JavaScript của bạn phải liên lạc với máy chủ. Máy chủ sau đó chạy logic trò chơi và gửi kết quả lại cho máy khách.

  • JavaScript nhận đầu vào người dùng và gửi nó đến các máy chủ
  • máy chủ đảm bảo rằng các đầu vào là hợp lệ (để ngăn chặn gian lận) và cập nhật các trò chơi với các đầu vào mới
  • máy chủ định kỳ gửi các trạng thái trò chơi JavaScript (hoặc bằng cách bỏ phiếu dài hoặc bằng cách yêu cầu JS tại một khoảng thời gian).

Về cơ bản, đừng bao giờ tin tưởng bất cứ điều gì đến từ JavaScript vì nó rất dễ sửa đổi. Mọi thứ nên được thực hiện phía máy chủ.

+0

Bạn đã không trả lời câu hỏi của tôi cả. Tôi cần peer-to-peer, đơn giản như vậy. Tôi đã phát triển đủ các trò chơi nhiều người chơi tập trung (bao gồm RTS và MMORPG) để biết những gì bạn đã đăng. Bạn hầu như không đọc câu hỏi của tôi. –

+0

"ứng dụng JavaScript của bạn ** phải ** liên lạc với máy chủ". Có nghĩa là nó không thể làm p2p. Ở tất cả. Hãy tưởng tượng nếu nó có thể, tất cả mọi thứ bạn làm là đột nhiên có nguy cơ được truyền đạt cho người khác ... –

6

Tóm lại không, p2p trong trình duyệt là không thể.

Gần nhất bạn có thể nhận được bằng NodeJS (đối với khả năng P2P JS) hoặc một máy chủ tập trung (hoặc một số máy chủ) và WebSockets (đối với ổ cắm trong một trình duyệt)

4

Thú vị câu hỏi, nhưng có lẽ là một trùng lặp:

tôi biết chắc chắn điều này không thể được thực hiện chỉ sử dụng javascript (ở mọi trình duyệt). Theo another answer trên Stackoverflow trong chủ đề trên, bạn có thể thực hiện việc này bằng cách sử dụng rtmfp-api.

Dự án này hiển thị giao thức Rtmfp (do Flash phiên bản 10 cung cấp) cho ứng dụng javascript qua một applet flash ẩn. Giao thức cho phép nhiều khách hàng liên lạc trực tiếp. Xem tài liệu tham khảo cho thông tin chi tiết về giao thức.

Nhìn nhanh trang web bạn vẫn cần một máy chủ rtmfpUrl ở giữa, điều mà tôi hoàn toàn hiểu vì khách hàng cần có khả năng tìm thấy nhau (IP). Nhưng tôi giả định sau đó nó sẽ là p2p. Thực hiện tìm kiếm nhanh Tôi cũng tìm thấy open-source rtmfp-server(s).

Tôi chưa thử điều này, nhưng có lẽ điều này sẽ giúp bạn đạt được mục tiêu của mình.

Một số liên kết khác:

4

Câu hỏi này là cũ, nhưng bây giờ tôi có thể đưa ra một câu trả lời: YES, có cuối cùng là một cách để làm truyền thông p2p giữa các trình duyệt! Nhờ tiêu chuẩn mới WebRTC, các trình duyệt hiện đại đã hỗ trợ cho Kênh dữ liệu, một thứ mạnh hơn nhiều so với WebSockets.

Hãy xem ở đây:

WebRTC Data Channels

trực tuyến Ví dụ: Banana Bread 3D là một trò chơi First Person Shooter biên soạn để JS + WebGL, sử dụng WebRTC của kênh dữ liệu trong chế độ multiplayer:

BananaBread 3D Multiplayer online fps game

0

Có thể chuyển sang chế độ không có máy chủ bằng Flash. Điều này có thể thực hiện được với khả năng Peer to Peer của Adobe Flash. Tôi đã từng viết một cuộc trò chuyện ngang hàng với nó. Hạn chế là Actionscript là ngôn ngữ chết và có thể không được hỗ trợ nhiều trong tương lai.

Đây là lớp học thô. http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/NetGroup.html

Đây là tài nguyên nếu bạn không muốn viết của riêng bạn. http://www.as3gamegears.com/category/multiplayer/

Nếu bạn muốn tùy chọn Máy chủ ở phía máy chủ. Hãy thử tiện ích mở rộng node.js này.
http://socket.io/

Tôi khuyên bạn nên sử dụng máy chủ socket java thuộc loại nào đó. Electroserver từng là một trong những nhà lãnh đạo trong lĩnh vực này, nó có sự hỗ trợ của Unity và có thể mở rộng tới hàng trăm ngàn. Mặc dù tôi nghĩ rằng họ đã rơi vào thời kỳ khó khăn. Các trang web Electroserver đã không được truy cập cho đôi khi. Tôi biết có những người khác ngoài kia nhưng Electroserver là người duy nhất tôi đã sử dụng.

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