`

【转】网络在线游戏开发心得(服务器端)

 
阅读更多

http://blog.csdn.net/bromon/article/details/253330

 

Bromon原创 请尊重版权

  一个多人在线的棋牌类网络游戏的项目临近尾声,我参与了该项目的整个设计流程,并且完成了
90%的核心代码。关于这个项目,有很多地方值得聊一聊。本系列不打算把这个项目将得多么详细规范,那是设计文档应该描述的,我打算只说说一些值得注意的地方。

 

  这个项目的一个特别之处是,客户端是手机,用户通过移动网络与服务器通信。和PC相比,手机的处理能力极弱,而且网络流量费用昂贵。因为除了要考虑普通网络游戏的一些问题之外,这两点也需要在设计中充分考虑。

 

  首先是开发语言的选择,由于服务器是Linux的环境,MS的技术直接排除,至于MONO嘛,我实在不放心。可供选择的是C++JavaJava胜在网络能力强大,开发周期短,有众多框架和开源库的支持,要写出烂得不可接受的代码也不容易;C++则胜在速度快。综合各方面因素,C++更容易把这个项目变成一堆代码噩梦,我们选择了Java

 

一、网络

  
网络游戏,首先面临的问题当然是如何进行网络通信。首先考虑的是HTTP协议,因为所有的J2ME手机都支持这个,我们当然想尽可能的兼容用户。而且HTTP协议封装程度已经非常高了,不用去考虑线程、同步、状态管理、连接池,不过HTTP
协议有两个不爽的地方:

  ◇
    协议无状态,这个问题已经困扰过很多人很多次了。我曾考虑过的解决办法是改造HTTP协议,在数据传输完成之后不关闭socket,但是这样做工作量非常大,在项目周期中,基本上就是Mission impossible,不予考虑。那么客户也就只能通过轮询的方式向服务器请求数据。

  
    网络流量过大。就这个项目来说,网络间传递的只是指令,但是每次传递都要加上一堆毫无用处的HTTP Head,再加上客户端需要做轮询,这个流量对于手机来说简直恐怖,经简单测试,按照0.03/KGPRS网络费用计算,一局牌居然要消耗1元多的费用(每秒轮询),实在不可接受。也许我们可以采用流量费包月的资费方式,不过这个话题与技术无关。

 

  以上问题导致我们选择了Socket,这意味着我们将没有一个web环境,很多东西都要靠自己去实现:线程管理、客户状态监控、对象池、控制台……….

 

  网络部分打算采用Java NIO来实现,这是一种新的网络监听方式,基于事件的异步通信,可以提高性能。每个客户端连接之后,会有一个独立的SocketChannel与它通信,这个SocketChannel会在用户的整个生存周期中存在。用户如果断开连接,服务器会得到-1,并且会抛出Connection reset异常,通过捕获这两个特征,可以在用户意外断开连接后清理相关的资源。由于NIO是异步通信的,所以没有复杂的线程管理。

分享到:
评论

相关推荐

    网络在线游戏开发心得(Java服务器端).doc

    网络在线游戏开发心得(Java服务器端)

    WebGame的AS端开发心得

    ### WebGame的AS端开发心得解析 #### 一、理解AS项目全局结构 在WebGame的AS端开发过程中,理解项目的整体结构是非常重要的一步。这不仅有助于开发者更好地组织代码,还能确保项目的可维护性和可扩展性。对于AS端...

    游戏及游戏开发类图书

    这些图书包括《我的编程感悟:云风的游戏之旅》、《网络游戏服务器端编程》、《网络游戏客户端编程》、《游戏运营与管理》和《游戏架构设计与策划》。 《我的编程感悟:云风的游戏之旅》是作者云风的心得体会集,书...

    网络游戏安全技术的学习心得

    网络游戏的安全设计需要考虑多种安全策略,例如,通过限制异常行为检测系统来防止作弊,使用服务器端验证机制来避免数据篡改。此外,游戏设计者应避免创建可被恶意利用的游戏机制,如上述的“两种技能叠加”漏洞。...

    Unity3D((4.x5.x)版本游戏源码(4-5.x)(天神传)RPG(客户端+服务器)

    Unity3D 是一个跨平台的游戏开发引擎,支持多种编程语言如 C# 进行游戏开发。在本案例中提到的是 Unity3D 4.x 和 5.x 版本。 - **4.x 版本**:该版本主要增加了对 WebGL 的支持,使得开发者能够将游戏发布到网页上...

    千年服务端复古界面TGS2011源码学习端千年技术社区专用

    "千年服务端"指的是《千年》游戏的服务器端程序,它负责处理玩家连接、游戏逻辑、数据存储等核心功能。学习这部分源码,你可以了解到网络通信协议、游戏状态管理、多线程编程以及数据库交互等方面的知识。通过对源码...

    基于SSM++jsp的网络游戏公司官方平台系统.zip

    JSP:一种服务器端脚本语言,用于生成动态网页内容。 功能: 用户管理:包括用户注册、登录、修改个人信息等功能,方便用户管理自己的账户。 游戏管理:提供游戏发布、更新、下架等功能,帮助公司管理旗下的游戏...

    网络五子棋设计报告

    服务器端的代码示例中还涉及到了处理错误逻辑的部分,例如初始化失败、创建套接字失败、绑定失败、监听失败等。这些错误处理逻辑对于构建一个健壮的服务器系统至关重要。 #### 问题与不足 在实际开发过程中,可能...

    中国象棋聊天室游戏.zip

    玩家的聊天信息通过TCP或UDP协议在网络间传输,服务器端负责接收并广播消息,确保所有在线玩家都能即时看到聊天内容。同时,多线程技术确保了游戏进程与聊天过程的并发执行,不会因为某一操作阻塞整个程序。 界面...

    java_weiqi.rar_网络围棋

    2. 服务器端设计:服务器使用多线程处理多个客户端的连接请求,每个连接对应一个游戏线程。服务器接收到客户端的落子信息后,更新棋局状态,然后广播给所有相关客户端。 四、游戏逻辑实现 1. 棋盘表示:使用二维...

    LegendOfMir2

    在IT领域,尤其是网络游戏开发和运营中,"LegendOfMir2"是一款广为人知的经典游戏——热血传奇的客户端代码。此资源的利用对于游戏开发者、服务器管理员以及对游戏后端感兴趣的爱好者来说具有重要价值。下面,我们将...

    ASP源码—传奇类游戏公司网站源码 v1.0.zip

    传奇类游戏,通常是基于角色扮演(RPG)的网络游戏,具有丰富的剧情、多样化的角色和技能、激烈的战斗系统等特点。此类游戏的网站源码可能包含以下部分: 1. **首页**:展示游戏的简介、最新活动、玩家排行榜等信息...

    游戏助手APP软件+网站源码

    从给定的文件信息来看,目前提供的游戏助手APP软件与网站源码可能来自网络上的偶然发现,并且被某位开发者进行了二次开发。但从描述中可以推测,原始软件的功能可能并不完善,甚至有些匮乏。尽管如此,它仍然具备...

    实训项目八:JAVA网络编程(csdn)————程序.pdf

    4. **UDP数据报**:与TCP套接字不同,UDP是一种无连接的协议,适用于对实时性要求高的应用,例如视频会议或在线游戏。 5. **广播数据报**:UDP还支持广播通信,一个发送者可以向网络上的所有设备发送数据。 实验...

    军缘江湖聊天室源码

    总的来说,军缘江湖聊天室源码是一个基于ASP技术的网络聊天应用实例,它的设计和实现涉及到了Web服务器配置、数据库操作、用户交互等多个方面,对于学习和研究ASP开发、网络游戏社区构建以及服务器端编程有着实际的...

    (完整word版)基于Java的猜拳小游戏设计.pdf

    Java在网络应用中的强大在于它可以创建动态、交互的内容,比如网页应用、服务器端脚本等。它提供的Java Servlet和JavaServer Pages(JSP)技术用于构建Web应用程序,使得Web页面不再仅仅是静态信息的展示,而是可以...

    基于jsp的某游戏官方网站源码数据库.doc

    - 这种架构易于维护和升级,因为所有的业务逻辑都在服务器端实现,当需要进行修改或升级时,只需更新服务器端代码即可。 - 分布式部署非常简单,只需将应用部署到一台或多台服务器上,客户端通过网络访问即可。 #...

    奇迹世界服务端源码

    本篇将详细探讨"奇迹世界服务端源码"这一珍贵资源,它是游戏开发领域的重要参考资料,对于学习、研究及优化游戏服务器架构具有极高的价值。 "奇迹世界"是一款深受玩家喜爱的网络游戏,其服务端源码的公开,为开发者...

    Java网络教学平台本科毕业设计论文(1.5万字,含平台截图,具有参考价值).rar

    1. **Java编程语言**:Java是一种广泛应用于服务器端开发、移动应用、桌面应用和游戏开发等领域的高级编程语言。它的特性包括跨平台性(Write Once, Run Anywhere)、面向对象、安全性高、稳定性和性能优越。在设计...

Global site tag (gtag.js) - Google Analytics