Answers:
根据我的经验,不仅可行,而且非常好。我已经使用C#开发了几台MMO服务器,我必须说我从不后悔选择语言和平台。
一般而言,对于C#和.NET,有很多很棒的库和工具-网络,日志记录,O / R映射等。而且,与Java C#相比,C#更具表现力,更不那么冗长(不过,有些人可能会对此争论不休。) )
恐吓某些人的GC“开销”并不是真正的问题,除非您碰巧以每秒数十亿的分配滥用它。例如,我们当前的服务器在重负载下的分配速度高达50 mb /秒,而GC不会引入任何明显的延迟。但是,我们确实必须在战略性位置使用对象池-最重要的是,代表网络数据包的对象被池化而不是垃圾回收。即使关闭池,GC也不是最大的问题。
作为C#多么酷的一个例子,这是我们最近实现的。我们的服务器运行多个WCF服务,游戏客户端将其用于非时间紧迫的任务,并且还将它们用于服务器管理。事实证明,建立WCF服务以简单地将我们的游戏对象返回给调用者非常容易。因此,我们做到了,然后为LINQPad制作了一个小插件以连接到我们的服务器-现在我们可以运行查询
from character in Service.GetOnlineCharacters()
where character.LocationManager.LocationId==5 && character.Attributes.Level<10
select new { character.Id, character.Nick }
在实时服务器上,同样如此!我认为您无法在任何其他平台上执行此操作。至少不在几天的工作中。
当然,您可以使用C#。
就C#或其他.NET生态系统的性能而言,要意识到的更大问题之一是GC – .NET框架提供了几种值得学习的GC风格,包括“服务器” GC。即使在托管环境中,智能管理内存(例如,通过池化)仍然是一项不错的技术。
作为基础框架的一部分或通过第三方,有几种健壮的API用于与SQL交互,通过TCP等以C#进行通信,因此在此应该没有麻烦。
如果您确实希望服务器基于Web,则可以使用ASP.NET或类似工具。如果您只想运行一个进程并侦听TCP连接,则可以将.exe和适当的依赖项部署到服务器计算机,打开适当的端口,然后运行.exe。
如果可以在Windows上部署,我强烈建议您这样做,尤其是因为您的客户端是C#。
但是不要低估游戏服务器的开发。即使制作一个简单的仅聊天的并发服务器也不是一件容易的事,并且您很快就会遇到许多有关并发性,锁定,性能等方面的问题。
作为起点,我希望您看一下该页面,该页面广泛地解释了如何在多个平台上进行并发套接字编程:
http://geekswithblogs.net/quension/archive/2006/06/30/83760.aspx
如果您真的很认真,建议您彻底研究Stevens的Unix网络编程。它的重点是Unix上的C套接字,但是其他所有平台(包括.net)的原理都相同。
编辑:这是另一个很棒的资源,专注于.net中并发服务器的可伸缩性和性能。它不再可用,但是我们在Wayback机器上的朋友可以得到它的副本。
一个“缺点”是对于C#,如果要在多个平台上使用它,则必须非常小心以确保您的代码可以与mono一起使用。如果您只关心在单个平台上运行它,而Windows是该平台,那么您应该不会有别人提到的问题。