Javascript và PHP cho nhiều người chơi thời gian thực? [đóng cửa]


13

Tôi đang tự hỏi liệu việc kết hợp máy khách Javascript với máy chủ PHP / mysql có phải là ý tưởng hay cho các trò chơi trình duyệt nhiều người chơi (quy mô nhỏ) thời gian thực HTML5 không?

Kiến thức kỹ thuật của tôi rất hạn chế và mặc dù tôi có kế hoạch tìm hiểu node.js trong tương lai, nhưng thời gian học tập là khá lớn ngay bây giờ.

Vì tôi đã quen thuộc với PHP, tôi cảm thấy tôi sẽ làm cho nó hoạt động nhanh hơn nhiều.

Quy mô tôi nghĩ là 2-8 người chơi tại thời điểm đó. Và cố gắng giữ cho máy khách đến tin nhắn máy chủ càng thấp càng tốt.

Các giá trị tôi dự định lưu trữ / xử lý là:

  • Tên người chơi và ID.
  • Vị trí X và Y.
  • Sức khỏe.
  • Các mặt hàng được trang bị (tối đa 8 khe cắm, có thể ít hơn).
  • Hành động (đi bộ, tấn công, sử dụng vv nhưng chỉ có 1 hành động / người chơi tại một thời điểm).
  • Bullet X, Y tọa độ và quỹ đạo.
  • Tên bang hội / bang hội.
  • Và một số chức năng trò chuyện / gửi thư cơ bản.

Tôi đoán là mặc dù nó không phải là giải pháp tốt nhất, nhưng miễn là tôi giữ logic nhỏ, rằng điều này là hoàn toàn có thể làm được. Tôi có đúng không


4
Âm thanh hoàn toàn có thể làm được. Tại sao bạn không thử nó? Trường hợp xấu nhất, bạn dành thời gian để học, trường hợp tốt nhất, bạn sẽ có được chính xác những gì bạn muốn.
William Mariager

1
Vâng nhưng tôi tưởng tượng điều này sẽ mất một chút thời gian để tạo ra và tôi không muốn lãng phí thời gian, đó là lý do tại sao tôi hỏi ở đây. =)
justanotherhulkist

8
Nếu bạn học được điều gì đó, thời gian sẽ không bị lãng phí. ;) Một điều đáng để xem xét là, nếu bạn chuyển đổi ngôn ngữ, bạn sẽ dành thời gian học ngôn ngữ mới học mạng cùng một lúc, điều đó có nghĩa là gỡ lỗi nhiều hơn để tìm ra nơi bạn đã sai. Nếu bạn gắn bó với những gì bạn biết, trước tiên bạn sẽ học kết nối mạng và sau đó bạn có thể chuyển nó nếu nó không hiệu quả và lần tới khi ai đó hỏi một câu hỏi tương tự, bạn sẽ biết câu trả lời đúng vì bạn đã kiểm tra nó.
William Mariager

1
Đó thực sự là một điểm tốt
justanotherhulkist

Câu trả lời:


12

Đối với một trò chơi thời gian thực, bạn muốn giảm thiểu độ trễ. Đây là hai mẹo để đạt được nó, với các ghi chú về PHP và Node:

  1. Sử dụng WebSockets. Chúng cho phép liên lạc hai chiều nhanh giữa máy chủ và máy khách. Sử dụng node.js ở đây có lợi thế là bạn có thể sử dụng cùng một API JavaScript ở cả hai đầu của đường ống. Ngoài ra còn có mô-đun socket.io tuyệt vời cho node.js cung cấp các công nghệ dự phòng cho các trình duyệt nhỏ hơn không hỗ trợ WebSockets. Googling một chút, có vẻ như bạn cũng có thể sử dụng WebSockets từ PHP nếu bạn thực sự muốn.
  2. Đừng liên quan đến cơ sở dữ liệu trong thời gian dữ liệu quan trọng như tọa độ của các đối tượng chuyển động nhanh. Điều này có nghĩa là giữ chúng trong bộ nhớ, không đặc biệt phù hợp với mô hình sử dụng PHP truyền thống là chạy một lần cho mỗi yêu cầu apache (hoặc bất kỳ máy chủ web nào), nhưng bạn có thể khởi chạy ứng dụng máy chủ PHP của mình dưới dạng độc lập. Tôi đoán Node, với lõi V8 của nó, sẽ nhanh hơn PHP . Cho dù đó là một vấn đề phụ thuộc vào mức độ yêu cầu trò chơi của bạn và sức mạnh của máy chủ.

Bản thân tôi thấy node.js rất dễ nhận và vì dù sao bạn cũng sẽ cần mã hóa khá nhiều JavaScript, nên tôi khuyên bạn nên thử nó. Ít nhất hãy xem nhanh các hướng dẫn của socket.io để xem nó tầm thường như thế nào khi thiết lập kênh liên lạc thời gian thực.


+1 cho điểm 2. Sai lầm lớn nhất bạn có thể mắc phải với điều này là hy vọng các truy vấn MySQL sẽ kích hoạt trên mỗi sự kiện. Bất cứ điều gì bạn có thể làm để di chuyển dữ liệu trò chơi ra khỏi ổ cứng sẽ giúp ích. Tôi đã thành công với việc lạm dụng Memcached cho việc này. Chắc chắn có những cách khác.
DampeS8N

Vâng tôi thực sự muốn tìm hiểu nút, nhưng tôi vẫn chưa bắt đầu từ cmd, lỗi lớn nhất mà các nhà phát triển đã mắc phải là làm cho nó trở nên rất khó khăn. Hiện tại phiên bản windows đi kèm với trình cài đặt, có thể dùng thử nếu tôi tìm thấy một hướng dẫn tốt.
justanotherhulkist

Nút không khó để bắt đầu hoặc sử dụng. Khó hơn PHP là có, nhưng PHP phải trả giá đắt vì sự tiện lợi của nó - thiết kế cho phép nó được nhúng vào Apache và mặc định ở mọi nơi không có cấu hình cũng gây ra nhiều vấn đề khiến PHP hoàn toàn là sự lựa chọn tồi tệ nhất của bạn có thể làm cho một phụ trợ trò chơi thời gian thực. Node, Python, Ruby, Java, v.v ... đều yêu cầu bạn thiết lập máy chủ ứng dụng, nhưng chính mô hình đó cho phép xử lý trong bộ nhớ theo sự kiện có khả năng mở rộng cao mà theo nghĩa đen là không thể đạt được trong PHP.
Sean Middleditch

1

Cùng với câu trả lời của Tapio, tôi muốn đề xuất chỉ (nếu có thể) gửi đầu vào của người dùng (nhấp chuột và nhập bàn phím) đến máy chủ và để cả máy chủ và máy khách mô phỏng trò chơi. Mỗi N khách hàng sẽ yêu cầu máy chủ đồng bộ hóa và máy chủ sẽ trả lời tất cả thông tin khách hàng cần để kết xuất trò chơi như sức khỏe, vật phẩm, v.v. Điều này là để đảm bảo khách hàng không bị đồng bộ hóa nhiều

Tất nhiên cả máy chủ và máy khách sẽ cần phải thực hiện chính xác cùng một trò chơi, vì vậy đây có thể là một công việc nhiều hơn một chút. Nếu bạn có các triển khai hoàn hảo trên cả máy khách và máy chủ, máy khách sẽ cần phải đồng bộ hóa ít thường xuyên hơn.

Điều này sẽ giảm nhắn tin máy khách / máy chủ và điều này làm giảm độ trễ. Điều này cũng sẽ giúp ngăn ngừa gian lận.

Giả sử bạn đang tạo trò chơi này bằng JavaScript, có lẽ cũng đáng để viết back-end bằng JavaScript, sử dụng NodeJS. Bằng cách này, bạn có thể sử dụng lại việc triển khai JavaScript trò chơi của mình cho cả máy chủ và máy khách.


0

Tôi khuyên bạn nên học Nodejs. Nếu bạn đã có Javascript bây giờ, nó sẽ không quá khó khăn. Tôi đã thực hiện một trò chơi TRON Multiplayer một cách nhanh chóng với Nodejs và đó là ngày đầu tiên tôi sử dụng nó. (Ồ, và ứng dụng khách là một khung vẽ HTML5; Tôi chỉ gửi đầu vào khóa, như đã đề cập trong các nhận xét khác.)

Hãy nhìn vào một mô-đun gọi là nowjs. Chúc may mắn!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.