目标手机软件
手机网游制造之
请求处理篇
开发程序:疯狂的
开发进度:第四期
本期要点:设计服务器端请求处理功能
开发平台:Java平台
经过前面3期的讲解,我们的手机网游《疯狂的》大体已经完成,在加上上本期开发的请求处理功能,就OK啦。快来试试我们的《疯狂的》吧(游戏下载地址:http://www.shudoo.com/bzsoft)。
既然是手机网游,自然客户端的数量就会比较多,所以多个客户端同时向服务器端发送请求的情况很常见。为了更好的运行,服务器端需要同时处理多个客户端的请求,这就是用到并发处理。下面就随着我们一起学习手机网游是如何并发处理多个客户端的请求的。
请求处理设计思路
在《疯狂的》程序的服务器端请求处理功能中,没有采用“线程池”技术,而是直接采用当一个客户端连接请求到达时,启动一个新的线程进行处理,在连接完成以后关闭线连接程。
通过为每个连接的客户端设置新的线程,很容易就实现了处理多个客户端的要求,使得多个客户端可以同时工作(图1)。在每个线程的内部,先根据客户端网络协议格式规定,解析客户端发送过来的请求数据,然后依据不同的请求命令分别进行处理。
如何并发处理
由于服务器端需要同时处理多个客户端发送的请求,所以需要对核心的数据进行并发处理,这样才能解决数据同步的问题。下面以分配用户ID为例子,来介绍服务器端并发处理的过程。客户端第一次连接服务器端时,服务器端反馈一个唯一的序号给客户端。服务器端每派发一个ID,ID的值就加1。
如果多个客户端同时发送请求,服务器端计数就有可能出错。使用Java语言中的synchronized关键字修饰处理逻辑,可以解决这个问题。使用该函数反馈的userID(图2),可以保证在多个客户端同时访问的情况下数据的同步。
设计服务端网络协议
服务器端网络协议,最主要的功能就是将服务器端的处理结果数据反馈给客户端,从而控制客户端的逻辑行为。在设计服务器端网络协议时,需要考虑有几种反馈指令以及每种反馈需要反馈的参数等。此外,还要考虑如何减少数据的重复。
服务器端的网络协议中的成功指令用于响应客户端的准备指令,在客户端登录成功以后,向服务器端发送开始指令,如果服务器端无法匹配对战用户,则反馈继续等待指令,这样客户端将继续等待其他玩家。如果有其他玩家匹配或已经由服务器匹配给其他玩家对战,则反馈初始数据指令,并反馈服务器端生成的房间编号、初始地图数据、角色数据等。
在游戏开始以后,客户端每隔一定时间发出获得数据指令,服务器端反馈游戏刷新指令,将当前游戏数据反馈给客户端。客户端发送的移动指令等,直接在服务器端进行处理,不反馈指令。
请求处理设计步骤
第一步:创建项目
启动Eclipse,选择“File→New→Java Project”,设置项目名称为“BomberServer”,并一路选择“Next”, 完成项目的建立。然后新建一个入口类,选择“File→New→Class”,设置名称为“Server”,点击“Finish”。创建项目的代码下载地址是http://www.shudoo.com/bzsoft。
第二步:设计游戏线程类
选择“File→New→Class”,并设置名称为“LogicThread”,点击“Finish”完成游戏线程类的创建,该类读取客户端发送数据以及向客户端发送数据。关键码如下所示(完整代码下载地址:http://www.shudoo.com/bzsoft):
//读取数据
byte[] b = new byte[1024];
is = s.getInputStream();
int n = is.read(b);
byte[] request = getData(b,n);
//数据错误处理
if(request.length == 0){
return; //结束程序
}
//处理逻辑
byte[] response = doLogic(request);
//如果反馈为null,则结束处理
if(response == null){
return;
}
//反馈给客户端
os = s.getOutputStream();
//HTTP协议信息
os.write("HTTP/1.1 200 OK\n\r".getBytes());
os.write("accept:*.*\n\r\n".getBytes());
os.write(response);
第三步:设计网络协议指令接口
选择“File→New→Interface”,设置名称为“ResponseCommand”,点击“Finish”完成游戏网络协议接口的创建,该接口包含所有网络协议指令的代码。关键码如下所示(完整代码下载地址:http://www.shudoo.com/bzsoft):
/**准备成功*/
public final static byte READY_OK = 0x0;
/**继续等待*/
public final static byte CONTINUE_WAIT = 0x1;
/**初始数据*/
public final static byte INIT_DATA = 0x2;
/**游戏刷新数据*/
public final static byte GAME_DATA = 0x3;
第四步:运行程序
在Eclipse主界面左侧的“Package Explorer”中,选中项目源代码Server.java,单击鼠标右键,选择“Run As→Java Application”即可运行程序。
总结
经过四期的设计,手机网游《疯狂的》就开发完成了,我们设计网络协议以及网络程序框架的思路,都是设计其他手机网络程序可以借鉴的。由于我们开发《疯狂的》的目的不是为了盈利,所以在一些细节上还比较欠缺。
开发实际的手机网游程序,还要考虑网络连接的时间、各个手机机型的网络设置、CMWAP和CMNET联网代码的区别、移动计费页面的处理、优化网络数据的传输和服务器端的数据存储。
对初次进行手机网游开发的程序员,建议先开发比较简单的网络程序,例如对战类的棋牌游戏或回合制游戏等,然后再开发复杂的游戏类型。设计网络协议时,要尽量减少网络实际数据的传输,这样既可以提高程序的执行效率,也可以降低网络流量。
到此为止,手机编程就将转入问答为主的互动了,大家可以在数动连线网站的编程板块中交流手机编程的问题,也可以在手机开发群中讨论。下期开始,我们将重点关注开心农场之类的编程,敬请关注。
读者反馈
开发QQ群:看了上期的文章,我有一个疑问,如何减少客户端跟服务器端之间的流量呢?
小编:编写手机网络程序,减少客户端和服务器端的流量是一个必须考虑的问题。减少客户端和服务器端之间的流量,可以从两个方面进行考虑。
1.减少客户端和服务器端之间的通讯频率,也就是减少单位时间内通讯的次数,扩大通讯之间的实际间隔。2.优化网络协议设计,优化协议设计减少每次传输的数据数量。同时使用这两个方式,可以显著降低客户端和服务器端之间的流量。
开发QQ群:我比较好奇,手机网游的服务器端放在哪里?也是在租用的服务器里面吗?
小编:手机网游的服务器端和普通的网游服务器端一样,都需要一个专门的服务器进行运行,只要该服务器满足在互联网拥有一个固定的域名或IP地址即可。服务器可以租用,也可以由公司自己搭建,不过一般都是自己搭建的。
读者问题:我的公司要开发药品管理系统,要支持PDA,能给我一些建议吗?
辛涛:要支持PDA有两种形式,一种方式是跟PC端一样用B/S架构,在PDA上使用浏览器访问管理系统即可。另一种方式是开发PDA上的客户端,通过网络直接操作服务器端的数据库。前一种方式实现简单,但不支持离线操作;后一种方式需另外开发客户端,但速度快、支持离线操作。你根据公司的实际情况来酌情选择吧。
第八个QQ群: 57137039,验证码:陈邓新。欢迎对手机编程感兴趣的朋友加入。
(河南 陈跃峰)
分享到:
相关推荐
1. 《电脑报》的历史:自1992年创刊至今,这份报纸已走过多年历程,见证了中国计算机行业的发展和变革。 2. 主办和主管单位:《电脑报》是由西南大学、重庆市科协共同主办和主管,这表明它具有一定的学术背景和官方...
7. 玩家社区:对于游戏爱好者来说,2018年的《电脑报》可能会提供最新游戏的评测、游戏硬件推荐、游戏玩法分享等内容。 需要注意的是,上述提到的所有内容都是根据《电脑报》的常规内容和2018年IT行业的大致情况所...
本期电脑报涵盖了多个领域的技术新闻和评测,内容丰富而且多样化,涵盖了小米 CC9 Pro 手机、Apple Watch 5、AMD 锐龙 9 3950X 等多个热门技术话题,同时也报道了职业打假第一人谈实名举报美团、房企血拼双十一、...
电脑报电子版
电脑报2000合订本
《电脑报1992-2001》是一份极具历史价值的IT文献资料,它涵盖了1992年至2001年间中国计算机技术和信息科技发展的全貌。这十年是中国信息技术飞速发展的关键时期,从那时起,个人计算机逐渐普及,互联网开始萌芽并...
资源名称:《电脑报》2013年期刊汇总(持续更新)资源目录:【】《电脑报》(2013年第14期 4月15日出版)【】电脑报 13年第35期【】电脑报 13年第36期【】电脑报 2013年37期【】电脑报 2013年第10期3月18日出版 绝对...
在数字化时代,电脑及数码设备已成为日常生活中不可或缺的一部分。它们不仅提升了我们的工作效率,也丰富了我们的娱乐生活。然而,随着技术的快速发展,各类电脑硬件和软件不断更新迭代,常常令消费者感到目不暇接。...
2016年5月电脑报,可以掌握一个信息时代的
《电脑报十年珍藏版》(1991-2001)是一部记录了中国IT行业发展初期到中期重要历程的珍贵资料集。这是一份集合了十年间《电脑报》出版的所有报纸内容,涵盖了从个人计算机的普及、操作系统的发展、互联网的兴起,到...
电脑报第24期、电脑报第25期、电脑报第26期、电脑报第27期、电脑报第28期、电脑报第29期、电脑报第30期、电脑报第31期、电脑报第32期、电脑报第33期、电脑报第34期、电脑报第35期、电脑报第36期、电脑报第37期、电脑...
电脑报 电脑报阅读系统 电脑报合订本 电脑报电子版 电脑报阅读系统2002
《电脑报》2017年第42期,高清PDF矢量版。 电脑报官方网站是中国发行量最大的计算机报——《电脑报》的官方网站,也是一个专业、全面、及时的数码产品信息聚合站。为用户及时提供每期电脑报上的精彩文章以及丰富的...
- **标题含义**:这指的是《电脑报》在2018年发行的第50期PDF版电子文档。 - **描述含义**:与标题相同,再次强调了该文件是《电脑报》2018年第50期的PDF版本。 ### 2. 电脑报 - **含义**:《电脑报》是一份专注于...
7. **学习资源**:《电脑报》的内容涵盖了计算机基础知识、软件应用、硬件维护、编程教程、网络安全等多个领域,对于IT爱好者和初学者来说是宝贵的自学资料。 8. **历史价值**:《电脑报阅读系统2005》不仅提供了...
电脑报作为一份专注于IT行业和计算机技术的权威媒体,长期以来一直致力于向读者传递最新、最全面的电脑技术信息。该报不仅包括对行业最新动态的及时报道,而且深入浅出地提供了产品评测、技术教程、行业分析以及读者...
《电脑报》于1992年1月3日由西南大学、重庆市科协正式创刊出版 是西南大学、重庆市科协主办和主管的计算机周报。17年来坚持“普及计算机知识,提高全民族文化素质”的办报宗旨,已由最初四开四版,扩大到四开一百版...
虽然我们无法从提供的文件中获得具体的文本内容,但基于这份报纸的总体特征和行业关注点,我们可以构建一篇详尽的文章,围绕《电脑报》常报道的内容范畴,提供一篇全面的介绍。 《电脑报》自1992年创刊以来,一直...
《电脑报阅读系统2012显示图片补丁详解》 电脑报阅读系统2012是一款专为用户浏览和管理《电脑报》电子版设计的软件,它提供了丰富的功能,帮助用户方便地查看和搜索往期的电脑报内容。然而,用户在使用过程中可能会...
电脑报是中国一份专注于电脑科技和信息技术领域的报刊媒体,它通常会包含最新的IT行业新闻、硬件评测、软件应用、网络技术、编程开发等内容。每一期的电脑报都会根据当时的技术发展和行业动态,安排一系列的文章来...