Javascript และ PHP สำหรับผู้เล่นหลายคนแบบเรียลไทม์? [ปิด]


13

ฉันสงสัยว่าการรวม Javascript clientside กับ PHP / mysql serverside เป็นความคิดที่ดีสำหรับเกมเบราว์เซอร์ HTML5 แบบเรียลไทม์ (ขนาดเล็ก) หรือไม่

ความรู้ด้านเทคนิคของฉันมี จำกัด มากและแม้ว่าฉันจะวางแผนที่จะเรียนรู้ node.js ในอนาคต แต่ช่วงการเรียนรู้ก็ค่อนข้างใหญ่ในตอนนี้

ตั้งแต่ฉันคุ้นเคยกับ PHP ฉันรู้สึกว่าฉันจะทำให้มันทำงานได้เร็วขึ้นมาก

สเกลที่ฉันคิดคือผู้เล่น 2-8 คนในเวลานั้น และพยายามที่จะทำให้ไคลเอนต์กับเซิร์ฟเวอร์ข้อความนับเป็นต่ำที่สุด

ค่าที่ฉันตั้งใจจะจัดเก็บ / จัดการคือ:

  • ชื่อผู้เล่นและรหัส
  • ตำแหน่ง X และ Y
  • สุขภาพ.
  • รายการที่ติดตั้ง (สูงสุด 8 ช่องอาจน้อยกว่า)
  • การกระทำ (การเดินการโจมตีการใช้งานอื่น ๆ แต่ทำได้ครั้งละ 1 การกระทำ / ผู้เล่น)
  • Bullet X, Y พิกัดและวิถี
  • ชื่อ Guild / Clan
  • และบางฟังก์ชั่นการแชท / การส่งจดหมายขั้นพื้นฐาน

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


4
ฟังดูเป็นไปได้อย่างสมบูรณ์แบบ ทำไมคุณไม่ลองดูล่ะ กรณีที่แย่ที่สุดคุณใช้เวลาในการเรียนรู้กรณีที่ดีที่สุดคุณจะได้สิ่งที่ต้องการ
William Mariager

1
ใช่ แต่ฉันคิดว่ามันจะใช้เวลาสร้างและฉันไม่ต้องการเสียเวลานั่นคือเหตุผลที่ฉันถามที่นี่ =)
justanotherhobbyist

8
หากคุณเรียนรู้บางสิ่งบางอย่างเวลาก็ไม่สูญเปล่า ;) สิ่งที่ควรพิจารณาคือถ้าคุณเปลี่ยนภาษาคุณจะใช้เวลาในการเรียนรู้ภาษาใหม่และเครือข่ายการเรียนรู้ในเวลาเดียวกันซึ่งหมายถึงการแก้ไขจุดบกพร่องมากขึ้นเพื่อค้นหาตำแหน่งที่คุณทำผิด ถ้าคุณยึดติดกับสิ่งที่คุณรู้คุณจะได้เรียนรู้การเชื่อมต่อเครือข่ายก่อนจากนั้นคุณสามารถพอร์ตได้หากไม่มีประสิทธิภาพและครั้งต่อไปที่มีคนถามคำถามที่คล้ายกันคุณจะรู้คำตอบที่ถูกต้องเพราะคุณทดสอบ
William Mariager

1
จริงๆแล้วมันเป็นจุดที่ดี
justanotherhobbyist

คำตอบ:


12

สำหรับเกมเรียลไทม์คุณต้องการลดเวลาในการตอบสนอง นี่คือเคล็ดลับสองข้อในการทำให้สำเร็จโดยมีหมายเหตุเกี่ยวกับ PHP และ Node:

  1. ใช้ WebSockets อนุญาตการสื่อสารสองทางที่รวดเร็วระหว่างเซิร์ฟเวอร์และไคลเอนต์ การใช้ node.js ที่นี่มีข้อดีที่คุณสามารถใช้ JavaScript API เดียวกันบนปลายทั้งสองของไพพ์ นอกจากนี้ยังมีโมดูล socket.io ที่ยอดเยี่ยมสำหรับ node.js ที่นำเสนอเทคโนโลยีทางเลือกสำหรับเบราว์เซอร์ที่ไม่รองรับ WebSockets Googling เล็กน้อยดูเหมือนว่าคุณยังสามารถใช้ WebSockets จาก PHP ได้หากคุณต้องการ
  2. ไม่เกี่ยวข้องกับฐานข้อมูลในเวลาข้อมูลสำคัญเช่นพิกัดของวัตถุที่เคลื่อนไหวเร็ว ซึ่งหมายความว่าทำให้พวกเขาอยู่ในหน่วยความจำซึ่งไม่เหมาะอย่างยิ่งสำหรับรูปแบบการใช้งาน PHP แบบดั้งเดิมที่มีการใช้งานเพียงครั้งเดียวสำหรับแต่ละคำขอไปยัง Apache (หรือเว็บเซิร์ฟเวอร์ใด ๆ ) แต่คุณสามารถเปิดแอปเซิร์ฟเวอร์ PHP ของคุณ ฉันเดาว่าโหนดที่มีแกนกลาง V8 นั้นจะเร็วกว่า PHPแม้ว่า ไม่ว่าจะเป็นปัญหาขึ้นอยู่กับความต้องการเกมของคุณและประสิทธิภาพของเซิร์ฟเวอร์

ฉันเองพบว่า node.js ง่ายมากในการรับและเนื่องจากคุณจะต้องมีรหัสของ JavaScript อยู่แล้วฉันขอแนะนำให้คุณลองใช้ อย่างน้อยลองดูบทช่วยสอนsocket.ioอย่างรวดเร็วเพื่อดูว่าการตั้งค่าช่องทางการสื่อสารแบบเรียลไทม์เป็นเรื่องสำคัญเพียงใด


+1 สำหรับจุดที่ 2 ความผิดพลาดที่ใหญ่ที่สุดที่คุณสามารถทำได้ด้วยการคาดหวังว่าการสืบค้น MySQL จะเริ่มต้นในแต่ละเหตุการณ์ ทุกสิ่งที่คุณสามารถทำได้เพื่อย้ายข้อมูลเกมออกจาก HDD จะช่วยได้ ฉันเคยประสบความสำเร็จกับการใช้ Memcached ในทางที่ผิด มีวิธีอื่นอย่างไม่ต้องสงสัย
DampeS8N

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

โหนดไม่ยากที่จะเริ่มต้นหรือใช้งาน ยากกว่า PHP คือใช่ แต่ PHP จ่ายราคาไม่แพงเพื่อความสะดวกสบาย - การออกแบบที่ให้มันฝังลงใน Apache และตามค่าเริ่มต้นทุกที่โดยไม่มีการกำหนดค่ายังทำให้เกิดปัญหามากมายที่ทำให้ PHP เป็นตัวเลือกที่แย่ที่สุด สามารถสร้างแบ็กเอนด์เกมเรียลไทม์ Node, Python, Ruby, Java และอื่น ๆ ทั้งหมดต้องการให้คุณติดตั้งเซิร์ฟเวอร์แอป แต่รูปแบบที่ดีช่วยให้การประมวลผลในหน่วยความจำที่ขับเคลื่อนด้วยเหตุการณ์ที่ปรับขนาดได้สูงซึ่งเป็นไปไม่ได้อย่างแท้จริงใน PHP
Sean Middleditch

1

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

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

สิ่งนี้จะลดการส่งข้อความของไคลเอ็นต์ / เซิร์ฟเวอร์และลดเวลาในการตอบสนอง นอกจากนี้ยังช่วยป้องกันการโกง

สมมติว่าคุณกำลังสร้างเกมนี้ใน JavaScript มันอาจคุ้มค่าที่จะเขียน back-end ใน JavaScript เช่นกันโดยใช้ NodeJS วิธีนี้คุณสามารถนำการใช้งาน JavaScript ของเกมไปใช้ใหม่ได้ทั้งเซิร์ฟเวอร์และไคลเอนต์


0

ฉันแนะนำการเรียนรู้ Nodejs หากตอนนี้คุณใช้ Javascript แล้วมันจะไม่ยากอย่างนั้น ฉันสร้างเกม TRON Multiplayer อย่างรวดเร็วด้วย Nodejs และเป็นวันแรกที่ฉันใช้เกม (โอ้และลูกค้าเป็นผ้าใบ HTML5; ฉันแค่ส่งคีย์อินพุตตามที่กล่าวถึงในความคิดเห็นอื่น ๆ )

ดูโมดูลที่เรียกว่า nowjs โชคดี!

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