Làm cách nào để theo dõi vị trí thời gian thực của người chơi trong MMO?


14

Làm thế nào để bạn theo dõi vị trí của những người chơi trong MMORPG? Tôi đọc rằng bạn có thể sử dụng cơ sở dữ liệu hoặc bạn có thể lưu trữ tọa độ trong các tệp. Tôi đã thử sử dụng một cơ sở dữ liệu nhưng nó chậm. Làm thế nào các tập tin có thể được sử dụng để theo dõi vị trí của người chơi?

Câu trả lời:


23

Làm thế nào các tập tin có thể được sử dụng để theo dõi vị trí của người chơi?

Bạn viết vị trí người chơi vào tập tin. Ví dụ: nếu bạn xác định mọi người chơi có một số duy nhất (hoặc GUID), bạn có thể sử dụng tên đó làm tên tệp. Trong tệp, chỉ cần viết dữ liệu vị trí ra theo định dạng bạn có thể phân tích cú pháp sau. Ví dụ: 467239.txtcó thể chứa 20, 3, 19nếu người chơi # 467239 ở vị trí đó ( x, y, z ).

Tuy nhiên, điều này không khác với những gì bạn sẽ làm với cơ sở dữ liệu, tuy nhiên - cơ sở dữ liệu không nên "chậm" trong thao tác này, nó sẽ rất nhanh (có thể nhanh hơn các tệp, vì bạn có nhiều khóa IO hơn hoặc khóa IO ganh đua - nếu bạn lưu trữ nhiều vị trí trên mỗi tệp - theo cách tiếp cận dựa trên hệ thống tệp).

Có lẽ bạn đang cố gắng sử dụng DB hoặc hệ thống tập tin để lưu trữ vị trí trình phát khi chạy ?Bạn không nên làm điều này cả .

Trong thời gian chạy, trong máy chủ của bạn, các vị trí người chơi nên được giữ trong bộ nhớ và được cập nhật ở đó, giống như bạn làm với bất kỳ loại trò chơi nào khác. Theo định kỳ, chúng có thể được lưu vào đĩa hoặc bộ lưu trữ liên tục khác - ví dụ: khi người chơi nghỉ ngơi, lưu hoặc đăng xuất.

Nhưng viết mọi vị trí người chơi để lưu trữ mọi bản cập nhật là không cần thiết và cực kỳ kém hiệu quả; nó sẽ không bao giờ đủ nhanh để xử lý bất cứ thứ gì giống như quy mô người chơi "đồ sộ".


1
Vâng, thực sự, tôi đã lưu vị trí người chơi vào một postgreSQL khi chạy. Nhưng, nếu tôi giữ nó trong bộ nhớ máy chủ, làm thế nào tôi có thể cập nhật vị trí trong máy khách?
Baccari

12
Phương thức mà máy khách được cập nhật giống nhau trong mọi trường hợp: máy chủ cho khách hàng biết vị trí của mình thông qua tin nhắn mạng (hay thực tế hơn, máy khách đang thực hiện dự đoán cục bộ cũng có một vị trí cục bộ máy chủ xác nhận và xác nhận cho khách hàng). Bạn không nên để khách hàng truy cập vào cơ sở dữ liệu mà máy chủ đang truy cập.

1
Tôi nhớ quan điểm về việc nói "làm điều đó với một tệp", chỉ để giải thích nó thực sự tồi tệ hơn việc sử dụng db và sau đó giải thích vấn đề thực sự là gì. Tại sao bạn cần giải thích tập tin vô dụng đó ngay từ đầu? Nó chỉ gây nhầm lẫn cho người đọc bình thường, không có lợi cho bất cứ ai.
o0 '.

6
Đó là kinh nghiệm của tôi trong quá khứ khi bỏ qua các câu hỏi trực tiếp và chỉ đơn giản là tiến hành giảng về những gì tôi nghĩ "đúng cách" sẽ có xu hướng đối đầu nhiều hơn và khiến OP không chấp nhận bị dẫn dắt khỏi nền tảng yếu hơn câu hỏi ban đầu của họ là đến từ, đó là tất cả.

13

Vị trí phải ở trong RAM khi sử dụng. (ví dụ: nhân vật của người chơi ở trong thế giới) Bạn không thể sử dụng DB làm bộ nhớ hoạt động. Vâng, bạn có thể, nhưng điều này sẽ rất khủng khiếp.

Bạn nên lưu các vị trí thường xuyên, nhưng không phải mỗi khi chúng thay đổi.

Tôi cũng sẽ tránh lưu tất cả các vị trí cùng một lúc. Nếu bạn muốn duy trì sự bền bỉ trong trường hợp máy chủ gặp sự cố, bạn nên lưu vị trí thường xuyên nhất có thể nhưng vào thời gian rảnh của trò chơi. Đơn giản chỉ cần làm điều này theo đợt.

Lưu 30 vị trí trong khi thời gian rảnh rỗi có sẵn.

Đối với khách hàng. Họ sẽ nhận được các bản cập nhật trạng thái trò chơi (có liên quan) thông qua kết nối với phần mềm máy chủ của bạn. Không phải từ DB ... Điều đó là không thực tế, chậm, xấu, xấu và lực lượng sẽ bị xáo trộn.


2
Và có, sử dụng một luồng riêng biệt để tránh các tình huống trong đó cơ sở dữ liệu có thể chặn phần còn lại của vòng lặp trò chơi của bạn.
Coyote

4

Tôi có một chủ đề riêng mà tôi xếp hàng để lưu vào các tệp cứ sau 500 lần đánh dấu trò chơi. Nếu không, bạn nên lưu trữ mọi thứ trong RAM.


4

Những gì tôi làm trong máy chủ của mình, là lưu trữ hướng của người chơi (vectơ) và vị trí cuối cùng, nếu người chơi có tốc độ, tôi sẽ tính toán vị trí mới của người chơi cứ sau 2 giây.

Tất nhiên, máy khách có vị trí vị trí riêng và gửi hướng đi mới (vectơ) đến máy chủ.

Máy chủ có thẩm quyền về vị trí và gửi gói vị trí nếu máy khách di chuyển một khoảng cách nhất định kể từ lần kiểm tra cuối cùng (điều này có thể dẫn đến hiệu ứng băng cao su là máy khách không đồng bộ).

Tất cả điều này xảy ra trong bộ nhớ của khóa học.

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.