วิธีจัดการกับผู้เล่นหลายคนใน JavaScript


12

ฉันแค่ทำการค้นคว้าเกี่ยวกับเทคโนโลยีเพื่อใช้สำหรับเกมมัลติเพลเยอร์มือถือ

ปัจจุบันมีการทดลองมากกว่านี้ในขณะนี้สิ่งเดียวที่ผู้เล่นต้องระวังคือผู้เล่นคนอื่น

ถ้านี่เป็นเว็บแอปพลิเคชั่นทั่วไปไม่ใช่เกมมันแค่ขอ HTTP ยิงตลอดเวลา - แต่เนื่องจากนี่เป็นเกมประสิทธิภาพและความแม่นยำจะเป็นปัญหา

เนื่องจากเกมถูกกำหนดเป้าหมายที่แพลตฟอร์มโทรศัพท์หลายแพลตฟอร์มสมมติว่าลูกค้าจะเขียนใน JavaScript หรือเฟรมเวิร์กตาม JavaScript เทคโนโลยีเซิร์ฟเวอร์เปิดอย่างสมบูรณ์

ผู้เล่นแต่ละคนจะต้องสร้างโพสต์ HTTP ที่เทียบเท่าและใช้เฉพาะโปรโตคอลที่เร็วกว่าเท่านั้น เหตุผลสำหรับการเล่นหลายคนที่ใช้เว็บเป็นเพราะผู้เล่นหลายคนผ่านบลูทู ธ หรือเครือข่ายท้องถิ่นอื่น ๆ จะมีความหลากหลายเกินไปในทุกแพลตฟอร์มและอาจทำให้เกิดปัญหา

ดังนั้นคำถามจึงเป็นเรื่องที่ดีสำหรับโปรโตคอล / เทคโนโลยีที่ใช้สำหรับผู้เล่นหลายคนของ JavaScript? มีคำแนะนำใด ๆ เกี่ยวกับเซิร์ฟเวอร์หรือสิ่งสำคัญ? เหตุผลใดฉันควรวางสถาปัตยกรรมสองชั้นนี้และไปกับการเชื่อมต่อโทรศัพท์โดยตรงกับโทรศัพท์?

คำตอบ:


15

คุณต้องการโปรโตคอลการสื่อสารที่ดีกว่าตามด้วย HTTP คุณอาจต้องการ UDP หรือ TCP เบราว์เซอร์ไม่มีวิธีสื่อสารด้วย UDP ดังนั้นทางเลือกเดียวของคุณคือ TCP

สำหรับ TCP คุณต้องการใช้WebSocketอย่างไรก็ตามการสนับสนุนเบราว์เซอร์ไม่เสถียรบน websockets

ซึ่งหมายความว่าคุณจะต้องใช้เทคนิคCOMETเพื่อจำลอง TCP หนึ่งการจำลองที่ได้รับความนิยมจะเป็น websocket ที่ฝังอยู่ในแอปพลิเคชันแฟลช

Socket.IOเป็นห้องสมุด (สำหรับnode.js ) ที่สนับสนุนเว็บซ็อคเก็ตและเลียนแบบพวกเขาด้วยการสำรองข้อมูลแบบย่อบนเว็บเบราว์เซอร์ที่ไม่เข้ากันได้ (มันใช้แฟลชและเทคนิค COMET อื่น ๆ )

สำหรับเกมจาวาสคริปต์ที่มีผู้เล่นหลายคนฉันอยากจะแนะนำให้ใช้ socket.io และ node.js


1
นี่คือตัวอย่างของเกมแบบ real-time ทำด้วย HTML5 และ WebSockets: rawkets.com ซอร์สโค้ดมีให้ที่นี่: github.com/robhawkes/rawkets
Elisée

1
นี่คือสอง มากขึ้นตัวอย่าง
Raynos

4

ทั้งคำถามและคำตอบที่ยอมรับถูกตีพิมพ์ในปี 2554 และเวลามีการเปลี่ยนแปลงตั้งแต่ :)

Websockets ค่อนข้างแพร่หลาย แต่เทคโนโลยีที่ดีกว่าคือ WebRTC ซึ่งอนุญาตให้สตรีม UDP ที่ไม่น่าเชื่อถือ สิ่งเหล่านี้ดีกว่ามากสำหรับเกม

นอกเหนือจากการสื่อสารแล้วยังมีอุปสรรคอื่น ๆ อีกมากมายที่ต้องเอาชนะเมื่อเขียนเกมที่มีผู้เล่นหลายคนเช่นการปรองดองสถานะเกมการทำนายฝั่งไคลเอ็นต์การทำให้เป็นอันดับและอื่น ๆ อีกมากมาย

<shameless self promotion>

ฉันเป็นหนึ่งในผู้พัฒนาดั้งเดิมของlance.ggเซิร์ฟเวอร์เกม / ห้องสมุดที่มีผู้เล่นหลายคนโดยใช้ node.js ซึ่งเราได้แก้ไขปัญหาที่กล่าวมาแล้วหลายประการ (และอื่น ๆ อีกมากมาย!) เป้าหมายของเราคือทำให้การพัฒนาเกมแบบผู้เล่นหลายคนง่ายขึ้นสำหรับนักพัฒนาเกม JavasScript ฉันขอเชิญคุณใช้เป็นจุดเริ่มต้นในการทำเกมของคุณ

</shameless self promotion>


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.