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优化、逻辑优化上,才能真正事半功倍。
评论列表: