网络编程和多插座

时间:2011-11-15 10:21:29

标签: multithreading performance sockets networking

我有想法开发一个游戏服务器(不是mmo服务器,而是可以处理许多游戏实例的服务器,就像许多国际象棋聚会一样)

我猜测一次管理(对于服务器)多个套接字上的客户端重新分区可能会很有趣。那么有兴趣这样做吗?

例如:

端口1234上的5个游戏实例
端口1235上的5个游戏实例
等...

我在想防火墙。防火墙可以在同一端口上的大量流量上更快地完成工作,或者可以更快地处理许多端口上的小流量?等等可以在不同的防火墙上改变这种行为吗? (iptables,其他?)

我们可以通过分隔多个插槽中的流量来优化带宽吗?或者无关紧要并将所有流量放在同一个套接字中会产生相同的结果吗?

您认为多端口网络可以为客户端提供更好的延迟吗?

安全收益?如果一个问题,而不是一个可以提供root访问权限的问题,在服务器上找到黑客可能只有少数人作弊,因为流量在许多不同的套接字上被打开了?

你认为这会带来一些我不认为的东西(当然不是编程难度)吗?

感谢您的回复。

3 个答案:

答案 0 :(得分:2)

分离流量并不一定会提高网络处理的性能。仅仅因为你正在分配更多的网络资源,这并不意味着它会提高整体性能,因为你很可能最终会遇到瓶颈问题。您可能有多个端口,但如果您只使用单个线程仍然存在性能问题,并且相反,如果您为该套接字使用多个线程(例如线程池),则相反地具有单个端口并且具有非常好的已验证的性能epoll,kqueue,IOCP等)。这完全取决于您分配的资源整体。我强烈建议你为你的服务器使用异步套接字,epoll和kqueue用于unix(epoll for linux,kqueue for freeBSD)或IOCP for Windows。他们的表现时间最长。

答案 1 :(得分:1)

我的直觉是,每场比赛使用专用端口会降低服务器速度。最好有一个端口,并以应用程序级协议表示游戏。

它还限制你~64K游戏,并可能引入地址重用问题。另一方面,我看不出它有什么收获;说实话,这似乎是不必要的复杂性。

我是hellepoll的作者,所以我的直觉是被考虑但不具有权威性。

在应用程序级别指定游戏还可以更方便地在应用程序级别上进出同一连接的游戏和大厅。

答案 2 :(得分:0)

究竟是什么问题?

在Linux上,您需要一个多路复用套接字系统调用,如poll(或ppollpselect)。

您的担忧可能与C10k problem

有关