2010-03-01 175 views
8

我在这里有一个关于.Net框架技术和游戏服务器的问题。可以肯定的是,我有一些游戏机作为客户端,我想将这些客户机连接到游戏服务器,如果我使用.NET框架开发服务器应用程序,你们认为这很好吗?.NET游戏服务器

客户机也是在dotnet技术中开发的。如果我将服务器扩展到几个并发运行的服务器,如果我在我的游戏服务器上使用.Net框架,那么该怎么办?我应该使用什么.Net技术,.Net Remoting,XML Web服务,COM +,MSMQ或任何建议?

这里还有一个更重要的因素是性能。我希望客户端和服务器之间的通信能够快速有效地进行通信,而不会有很长时间的滞后。

我希望扩展到几个服务器的目的是因为如果万一其中一台服务器停机或关闭服务,我仍然可以运行我的应用程序而不中断任务关键和实时的游戏过程。

有没有什么样的灵魂在那里做过这样的设置?如果是的话,你们对此感觉如何?在游戏服务器中使用.Net最好,最好,最差还是最差?

我真诚地感谢.Net和游戏开发专家在这里给我一些反馈。

感谢,

回答

0

我不认为我有那种回答这个需要的领域知识,但我仍要给它一个镜头,也许我会问一些问题,帮助梳理出正确的答案给你。

.net是要走的路吗?我不知道。与DirectX通信? - 通过,对不起。

客户端和服务器是否位于同一个LAN上?他们是通过网络连接吗?为了纯粹的性能,我想要一个ssume .Net Remoting。对于一般的通信,你可能想要考虑WCF,因为你可以通过改变配置来改变你的通信方式(例如排队到Web服务)。话虽如此,为了最大限度地排队等待,您可能需要小心实际设计端点的方式。

你说扩展服务器吗?我想你会想要碰到某种负载平衡器,有多个节点呢? 这可能会有所帮助:http://www.codeproject.com/KB/IP/remotingdesigndecisions.aspx

1

我不知道,一个标准的.NET方法将是你想要去的方式......

每个.NET您提到的技术具有相关的可测量设置和拆卸成本,而WCF是其中最差的。如果性能是您的目标,您需要直接与端口通话,而不是使用标准包装来处理它们。我甚至会争辩说,如果性能确实是关键,那么您需要查看直接C函数而不是.Net语言。(有些人肯定会不同意我的观点,但我发现Ruby和Python等动态语言也很快)

另一个问题就是数据后端。如果它全部在内存中,那么运行多个服务器意味着您必须使用某种缓存机制(如memcached)来保持数据全部同步。如果你打算使用数据库,我会建议使用几个端口,一个连接到你的数据库,另一个是严格基于内存的端口。您获得的好处是不需要数据库的数据可以在运行速度与计算机运行速度相同的内存空间中运行,并且进程无需等待昂贵的数据库连接。

WCF/.Net Remoting/COM +/etc对于业务应用程序来说非常棒,因为1秒钟的转换并不会杀死你,但是在每毫秒计数的实时环境中,你需要能够管理整个通信堆栈从您收到第一个数据包到关闭连接。我在实时环境中使用的每个.Net通信堆栈都为每个请求增加了近100ms。通过切断中间人并直接与客户打交道(即直接从码头读取码流,然后直接将码流发送到码头),我削减了这笔费用,并让时间倒退。当你每分钟处理数以万计的请求时,这个时间变得非常重要。

+0

使用UDP套接字的“标准.Net方法”没有任何问题... – 2010-03-01 04:21:33

+0

我正在为顶层通信层而不是基础System.Net类进行攻击。我从来没有试图在.Net中直接绑定到一个端口,总是通过UdpClient或TcpListener完成。 – thaBadDawg 2010-03-01 04:37:11

+0

通过netTcpBinding使用二进制数据传输时WCF的“开销”?你指的是什么? – 2010-03-01 04:50:12