代码之家  ›  专栏  ›  技术社区  ›  Gulvan

如何正确管理多人战略游戏中同时战斗的套接字

  •  0
  • Gulvan  · 技术社区  · 7 年前

    我正在构建一个策略游戏,玩家可以在其中互相战斗。至于现在,我专注于1v1 PvP战斗,但我也想建立一个架构,将允许进一步扩展到3v3战斗。

    我创建的游戏基于socket客户机/服务器架构。每一个玩家,将进入游戏,并按下“寻找匹配”按钮,将被放置在一个单独的战斗对其他玩家之一。

    但是,关于如何构造套接字,我有很多问题:

    1. 我需要一个单独的插座(“房间插座”)为每个同时进行的战斗?

    2. 谁应该创建和绑定房间插座?如果是客户机,如果客户机的端口关闭,服务器如何连接到此套接字?如果是服务器,请参阅第页。三

    3. 是否可以将所有这些套接字绑定到一个端口?如果地址和端口相同,客户端如何连接到“his”套接字?

    4. 何时以及如何打开“房间套接字”,以便每个客户机都能获得相应的端点?如何在服务器端编写?

    5. 我是使用多线程编程,还是可以不用它?

    我会很感激你的帮助

    第。S。因为我编写服务器的语言不是很流行,所以我不能使用任何现成的解决方案

    1 回复  |  直到 7 年前
        1
  •  1
  •   Myst    7 年前

    从你的问题来看,我想你可以从回顾 Beej Guide to Network Programming .

    1. 我需要一个单独的插座(“房间插座”)为每个同时进行的战斗?

    我不知道你说的“房间”插座是什么意思。如果你的意思是,不同的监听插座将被分配给每个游戏,比这将是不实际的。

    通常的方法是让服务器监听单个套接字(地址/端口),然后每个客户机都将连接到服务器的套接字。

    对于1:1的游戏,服务器可以将套接字与对联“匹配”,使“对联”进入一个房间。

    1. 是否可以将所有这些套接字绑定到一个端口?如果地址和端口相同,客户端如何连接到“his”套接字?

    1. 何时以及如何打开“房间套接字”,以便每个客户机都能获得相应的端点?如何在服务器端编写?

    这取决于语言。大多数语言的监听功能都有某种变化 the Beej Guide to Network Programming .

    通常服务器会调用 listen 然后使用 accept . 客户会打电话来 connect 只有一个插座。

    1. 匹配队列(“欢迎套接字”)需要多少套接字?

    对于1:1的游戏,在等待下一个可用连接时,需要一个“排队”的套接字。

    当然,这可能更复杂。如果客户机有游戏需求(即只有10级及以上的玩家),您可能需要一个有序列表或另一个数据存储来管理队列。

    1. 我是使用多线程编程,还是可以不用它?

    如果使用事件(非阻塞)设计,您可能可以在一台机器上用一个线程运行数千个游戏。