`
leecong1p
  • 浏览: 146226 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

开发手游服务端,网络连接框架的选择

 
阅读更多

 

   JAVA有很多优秀的网络连接框架。Mina、Netty、Gretty、Xsocket都是不错的高性能连接框架,如果做网络游戏服务器该如何选取呢?我简单凭我的了解和使用经验介绍一下,错误之处欢迎指正。

   Apache Mina,以高性能和高扩展性著称,应用广泛。它是基于NIO的TCP/UDP框架,支持各种协议,并且能很容易的整合spring等WEB框架,可以说功能很强大,扩展性很强,较偏向于web应用方面。Mina使用起来需要了解一些通信协议以及NIO的知识,不易入门,好在网上资料很全。

   Netty,据说是Mina的设计者发起的另一个项目,它提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。借鉴早期版本以及mina的经验,它们很类似,但Netty结构更加清晰,更加易用。

   Xsocket,基于NIO的轻量级socket连接框架。封装性很好,架构清晰,在保障高并发、多线程性能的前提下,提供极致地易用性,基本不用了解NIO就能完成高性能的应用开发。个人非常喜欢Xsocket,它客户端和服务端都可以实现,提供了性能可观的NIO socket。简化的API让我不用过多付出连接方面的编码从而将更多的精力用于游戏服务器本身。Xsocket本身并不提供HTTP支持(可以稍微麻烦一点编码实现),不过作者的另一个基于Xsocket的项目XlightWeb是为Http量身定制的轻量级框架,支持websocket,并且秉承了简洁易用的风格。

Xsocket项目地址:http://xsocket.org/

XlightWeb项目地址:http://xlightweb.org/

   通过我的实践发现,XlightWeb的性能虽然不错,但是在高并发高吞吐量下,发挥并不稳定波动较大。而Netty无论是性能还是CPU占用率都稳定得多,性能可以一直维持在较高的水平。所以我的建议是,基于socket的游戏服务器可以优先考虑Xsocket,基于Http的游戏服务器优先考虑Netty,但如果并发量不是特别大,XlightWeb也是不错的选择。当然,如果不怕麻烦,Mina可以应大部分需求,除了游戏服务还可以方便地扩展后台页面。

   题外话,其实做游戏服务器开发,主要的性能瓶颈并不在连接上,特别是手游本身在线量无法比拟端游,加上弱联网趋势,吞吐量也不会有很大压力。另外,JAVA服务器如果是工作在linux环境下,性能会大幅提升。所以,以上列举的框架基本都可以满足一般游戏服务器的需求,根据实际情况选择合适的框架,并把优化的重点放在数据库和IO优化、逻辑优化上,才能真正事半功倍。

   更多内容欢迎关注我的个人主页:http://www.leestorm.com

0
0
分享到:
评论
4 楼 leecong1p 2013-07-21  
windshome 写道
当然,你要是没有时间和资源,自然是另一回事。如果有一些时间,那么:

1)设计开发一个网络连接、事件派发的东西不是多么困难

……


好的,多谢赐教。
3 楼 windshome 2013-07-21  
当然,你要是没有时间和资源,自然是另一回事。如果有一些时间,那么:

1)设计开发一个网络连接、事件派发的东西不是多么困难

2)效率、稳定性、安全性的需要也是业务的一个部分,而且是非常重要的部分,不是只有过年要求算是业务逻辑

3)自己做的最大好处,就是如果出现联调和运行时的问题,自己能解决;最大的问题就是需要设计和开发时由高手来做。

4)开源的网络IO框架,在线程池和使用和IO读时内存的分配上,一定要仔细看它们的设计和实现,不弄清楚的话很危险

5)选择开源实现,都要经过仔细的选型分析和严格的测试;自己实现的话,也要严谨的设计实现和严格测试

至于重复发明轮子的话题,请看我的文章 http://windshome.iteye.com/blog/1853680
2 楼 leecong1p 2013-07-21  
windshome 写道
自己写一个吧,费不了多少事的!


嗯,是的,或许自己写的框架也不错,但有把握比这些已经发展很久,且应用广泛的框架好吗?如果花费大量的时间去重复发明轮子,我觉得不如把重心放在项目的业务逻辑上,你说对不?
1 楼 windshome 2013-07-19  
自己写一个吧,费不了多少事的!

相关推荐

Global site tag (gtag.js) - Google Analytics