Làm thế nào để một trò chơi trực tuyến tiếp tục sau khi chủ nhà rời đi?


12

Lưu ý: Đây là một câu hỏi về mạng, không chơi game. Tôi đang sử dụng StarCraft chỉ là một ví dụ.

Trò chơi StarCraft (không phải StarCraft 2) hỗ trợ chơi trực tuyến. Một người chủ nhà, và những người khác tham gia. Nếu chủ nhà rời khỏi trò chơi, trò chơi có thể tiếp tục vô thời hạn mà không cần chủ nhà. Làm thế nào mà làm việc?

Hãy xem xét kịch bản sau đây:

  • Tôi lưu trữ 3 so với 3. Lưu ý rằng, để mọi người có thể tham gia, bộ định tuyến của tôi phải được cấu hình để chuyển tiếp 6112, TCP và UDP (xem Hỗ trợ Blizzard ).
  • Năm người tham gia. Tất cả mọi người (bao gồm cả tôi) đứng đằng sau một bộ định tuyến. Tôi bắt đầu trò chơi.
  • Ba phút trong trò chơi, khoảng hai mươi người quá khích đổ vào căn cứ của tôi. Không ai giúp tôi.
  • Cơ sở của tôi đã bị loại bỏ, vì vậy tôi rời đi (trò chơi không cho bạn lựa chọn).
  • Trò chơi tiếp tục mà không có chủ nhà (đội chủ nhà có hai người chơi còn lại).

Làm thế nào để năm khách hàng còn lại (những người không cần 6112 chuyển tiếp) vẫn kết nối?

Nếu tôi hiểu chính xác: nếu hai chương trình muốn nói chuyện với nhau, một trong số chúng phải là "máy chủ" và lắng nghe các kết nối trên một cổng, trong khi chương trình kia phải là "máy khách" và bắt đầu yêu cầu kết nối trên đó Hải cảng. Họ không thể đơn giản bắt đầu gửi các gói cho nhau (và tôi thậm chí không biết họ sẽ như thế nào, nếu cả hai đều đứng sau bộ định tuyến).

Ai đó lưu trữ một trò chơi là một máy chủ, trong khi những người tham gia nó là khách hàng. Thật dễ dàng để xem các khách hàng có thể bắt đầu giao tiếp với máy chủ như thế nào. Điều tôi không nhận được là: làm thế nào để các khách hàng bắt đầu liên lạc với nhau mà không cần thông qua máy chủ? Giao thức Internet có cho phép máy chủ khởi tạo kết nối giữa các máy khách không?

Hoàn toàn có thể, trong trường hợp của StarCraft, lưu lượng trò chơi đi qua các máy chủ Battle.net. StarCraft duy trì kết nối với Battle.net trong các trò chơi (đối với tin nhắn từ bạn bè, v.v.). Tuy nhiên, tôi nghi ngờ lưu lượng truy cập trò chơi đi qua nó, bởi vì nếu có, tại sao máy chủ cần chuyển tiếp 6112?

Câu hỏi của tôi là: một máy chủ, với nhiều máy khách được kết nối với nó, có thể bắt đầu các kết nối giữa chúng không?


2
Tôi thích tài liệu tham khảo Starcraft ở đây ...
Jon

I host a 3 versus 3. Note that, for people to be able to join, my router has to be configured to port forward 6112, TCP and UDP (see Blizzard Support).Rõ ràng điều này là cần thiết để bắt đầu một trò chơi để người dùng có thể tìm thấy bạn, nhưng không bắt buộc phải duy trì kết nối.
JeffO

@Jeff O: Máy chủ Battle.net duy trì một danh sách các trò chơi có sẵn. Tuy nhiên, nếu máy chủ không chuyển tiếp, nó sẽ bị treo khi người khác cố gắng tham gia (tôi nghĩ vậy).
Joey Adams

Câu trả lời:


20

Nghe có vẻ như đục lỗ UDP

Đặt A và B là hai máy chủ, mỗi máy chủ trong mạng riêng của mình; N1 và N2 là hai thiết bị NAT; S là một máy chủ công cộng có địa chỉ IP có thể truy cập nổi tiếng toàn cầu.

  1. Mỗi A và B bắt đầu một cuộc trò chuyện UDP với S; các thiết bị NAT N1 và N2 tạo trạng thái dịch UDP và gán số cổng bên ngoài tạm thời
  2. S chuyển tiếp các số cổng này trở lại A và B
  3. A và B liên hệ trực tiếp với các thiết bị NAT của nhau trên các cổng được dịch; các thiết bị NAT sử dụng trạng thái dịch được tạo trước đó và gửi các gói đến A và B

Trong ví dụ này, bạn là S. Đối thủ của bạn là A và B. Khi bạn bị đá khỏi trò chơi, đối thủ của bạn có thể tiếp tục chơi vì họ đã đàm phán kết nối với nhau khi lần đầu tiên kết nối với bạn.


Wow +1, tôi không biết NAT có thể được sử dụng như thế
TheLQ

Vấn đề với NAT là bạn cần bắt đầu từ phía sau tường lửa. Do đó, bạn cần ít nhất máy tính ban đầu được cung cấp công khai hoặc không có gì để kết nối.

2

Nếu hai chương trình muốn nói chuyện với nhau, một chương trình không cần phải là máy chủ và chương trình còn lại là máy khách. Đó là một mô hình của mạng, nhưng không phải là mô hình duy nhất. Một mô hình rất phổ biến khác là mô hình ngang hàng , trong đó mọi người đều là khách hàng và máy chủ và bất kỳ ai cũng có thể nói chuyện với bất kỳ ai. Tôi không biết quá nhiều cụ thể về các mạng nội bộ nhiều người chơi của Starcraft, nhưng tôi đoán rằng rất có thể nó sẽ hoàn thành những gì bạn mô tả bằng cách sử dụng mô hình ngang hàng.


Các mô hình P2P nói chung vẫn yêu cầu các cổng được chuyển tiếp bởi ít nhất một người trong mỗi cặp đồng nghiệp để tạo kết nối nội bộ. Hãy thử tải xuống một torrent có và không có cổng chuyển tiếp và thấy sự khác biệt về số lượng kết nối.
Snorbuckle
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.