- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《java游戏服务端实现
java游戏服务端实现
?
一个多人在线的棋牌类网络游戏的项目临近尾声,我参与了该项目的整个设计流程,并且完成了90%的核心代码。关于这个项目,有很多地方值得聊一聊。本系列不打算把这个项目将得多么详细规范,那是设计文档应该描述的,我打算只说说一些值得注意的地方。 这个项目的一个特别之处是,客户端是手机,用户通过移动网络与服务器通信。和PC相比,手机的处理能力极弱,而且网络流量费用昂贵。因为除了要考虑普通网络游戏的一些问题之外,这两点也需要在设计中充分考虑。 首先是开发语言的选择,由于服务器是Linux的环境,MS的技术直接排除,至于MONO嘛,我实在不放心。可供选择的是C++和Java,Java胜 在网络能力强大,开发周期短,有众多框架和开源库的支持,要写出烂得不可接受的代码也不容易;C++则胜在速度快。综合各方面因素,C++更容易把这个项 目变成一堆代码噩梦,我们选择了Java。一、网络 网络游戏,首先面临的问题当然是如何进行网络通信。首先考虑的是HTTP协议,因为所有的J2ME手机都支持这个,我们当然想尽可能的兼容用户。而且HTTP协议封装程度已经非常高了,不用去考虑线程、同步、状态管理、连接池,不过HTTP协议有两个不爽的地方: ?协议无状态,这个问题已经困扰过很多人很多次了。我曾考虑过的解决办法是改造HTTP协议,在数据传输完成之后不关闭socket,但是这样做工作 量非常大,在项目周期中,基本上就是Mission?impossible,不予考虑。那么客户也就只能通过轮询的方式向服务器请求数据。 ?网络流量过大。就这个项目来说,网络间传递的只是指令,但是每次传递都要加上一堆毫无用处的HTTP?Head,再加上客户端需要做轮询,这个流量 对于手机来说简直恐怖,经简单测试,按照0.03元/K的GPRS网络费用计算,一局牌居然要消耗1元多的费用(每秒轮询),实在不可接受。也许我们可以 采用流量费包月的资费方式,不过这个话题与技术无关。 以上问题导致我们选择了Socket,这意味着我们将没有一个web环境,很多东西都要靠自己去实现:线程管理、客户状态监控、对象池、控制台………. 网络部分打算采用Java?NIO来实现,这是一种新的网络监听方式,基于事件的异步通信,可以提高性能。每个客户端连接之后,会有一个独立的 SocketChannel与它通信,这个SocketChannel会在用户的整个生存周期中存在。用户如果断开连接,服务器会得到-1,并且会抛出 Connection?reset异常,通过捕获这两个特征,可以在用户意外断开连接后清理相关的资源。由于NIO是异步通信的,所以没有复杂的线程管 理。二、通信协议 这个项目并没有复杂的通信指令,命令数量很有限,但是还是有个关键问题需要关注:流量。为 了尽量减小流量,我们使用字节代替字符串来保存系统指令,这样可以使流量减少一半,比如使用一个字节来保存一张扑克牌,字节高位表示花色,字节低位表示数 字,如果0代表黑桃,那么黑桃三就应该是0x03,这个需要靠位操作来实现:
int??m=0;
????int??n=3;
????byte??card=(byte?)(m)4)|((byte?)n;?//m左移四位,然后与n左或操作
游戏中需要传递用户的积分,这是一个大整数,使用四个字节来保存比较保险,将整数转换为四个字节的操作如下:
public??static??byte?[]?translateLong(long??mark)
{
????byte?[]?b?=?new??byte?[4];
????for??(int??i?=?0;?i??4;?i++)
????{
????????b[i]?=?(byte?)?(mark??(24?-?i?*?8));
????}
????return??b;
}
将四个字节转回来的操作如下:
public??static??long??translateByte(byte?[]?b)
{
????int??mask?=?0xff;
????int??temp?=?0;
????int??res?=?0;
????for??(int??i?=?0;?i??4;?i++)
????{
????????res?=?8;
????????temp?=?b[i]??mask;
????????res?|=?temp;
????}
????return??res;
}
三、数据库连接池 由于没有一个web环境,所以我们需要自己实现一个数据库连接池,apache有一个项目叫做commons?DBCP,这是一个基于apache自己 的对象池(apache?commons
您可能关注的文档
- 《IPHONE苹果4S5手机有锁无锁机识别.doc
- 《iPhone能搜已删短信引争议.docx
- 《iphone论文.doc
- 《iphone装安卓教程.doc
- 《2010江西冶金技术学院08毕业设计论文轴套类零件的加工工艺及设计.docx
- 《iPhone超级指南.doc
- 《2014年10种值得学习的软装设计方案分享.docx
- 《180T六梁桥式铸造起重机结构设计.doc
- 《2016届高考一轮复习课时学案NO.5系统内的分工合作—细胞器.doc
- 《iphone铃声制作以及itunes使用教程.doc
- 评分环境系统水平试卷页nenvironmental systems and societies paper 2 sl markscheme.pdf
- 不给糖就捣蛋1trick or treatlpr.pdf
- 及国产双龙主席新线路图.pdf
- 会话分类trevor hughes20 in 2013 the top privacy issues watchstudio 20值得隐私问题.pdf
- 模具制造商专用高精度立式加工中心电子型录nvd4000 dcg.pdf
- vscode软件安装海量资源尽在.pdf
- 内容品牌masport图库.pdf
- 银河护卫队综合笔记.pdf
- 文稿头部秋季slim raglan zip mock.pdf
- 协商解除劳动合同通知书(精选28篇) .pdf
文档评论(0)