Python中的多用户服务器套接字
我正在为iPhone开发一款多人游戏(使用cocos2d),现在几乎完成了,但还剩下多人游戏的部分。我在网上搜索了两天,还是找不到能解答我问题的资料。
我已经创建了一个搜索房间(在2000端口上使用tcp套接字),这个房间可以匹配想要快速对战的玩家。当两个玩家匹配成功后,服务器会把他们从搜索房间中断开,以便给新的搜索者(客户端/玩家)留出空间。
现在我想知道如何创建游戏房间(让两个玩家互动和玩耍的地方)?
我在想,是否可以在一个新的端口上创建一个新的tcp/udp套接字,让匹配成功的玩家连接到这个套接字,这样就能为他们提供一个完全独立的房间,让他们互相互动。
或者我需要一个新的服务器(机器/硬件),然后在那个服务器上创建一个新的套接字,让匹配的玩家连接到它。
或者可能还有其他的方法可以做到这一点。
注意:我现在不打算让游戏在服务器上运行来处理作弊问题,因为这样会给我的服务器CPU带来太大的负担。
1 个回答
我在想,我可以在一个新的端口上创建一个新的tcp/udp套接字,让匹配到的玩家连接到这个套接字,这样他们就可以在一个完全隔离的房间里互动。
是的,你可以这样做。这其实没什么难的。你只需要在第一个可用的端口上绑定一个套接字,然后把这个端口告诉两个玩家,等他们连接就行了。如果你担心黑客通过扫描端口来入侵,比如寻找新打开的端口,有一些方法可以应对这个问题,但既然你并不打算采取什么廉价的保护措施,我觉得这不是个大问题。
或者我需要一个新的服务器(机器/硬件),然后在那上面创建一个新的套接字,让配对的玩家连接到它。
你为什么需要这样做呢?这样对你有什么好处?当然,这样可以减轻第一个服务器的负担,但如果这是个问题,还有很多其他方法可以进行负载均衡;像这样不对称地处理,往往会导致一个服务器负载100%,而另一个只有5%……
或者也许还有其他方法可以做到这一点。
一个明显的方法就是不做任何事情。让他们继续使用当前的端口进行交流,只需附加一个不同的处理程序(或者在客户端状态机中使用不同的状态,或者其他什么;你没有告诉我们你是如何实现你的服务器的)。我不知道你想要的“完美隔离”是什么样的。但即使你想要不同的进程,你也可以把两个客户端的套接字迁移到另一个进程中;没有必要让他们连接到一个新端口。
另一种方法是完全让服务器不参与——使用STUN或打洞技术让他们直接进行点对点的游戏协议。
在这两种极端之间的任何做法似乎都不值得去做,除非你有一些没有解释的限制。
注意。我现在不打算在服务器上运行游戏来处理作弊者。因为这会给我的服务器CPU带来太大的负担。
我猜如果在服务器上放一点最基本的游戏逻辑来防止作弊都太贵,那为每对客户端启动一个单独的进程可能也会太贵。这也是不这样做的另一个原因。