游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1764|回复: 4

参考:网游服务器端开发心得之网络篇

[复制链接]

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20686
发表于 2005-1-15 22:52:00 | 显示全部楼层 |阅读模式
来源:天极网

  一个多人在线的棋牌类网络游戏的项目临近尾声,我参与了该项目的整个设计流程,并且完成了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是异步通信的,所以没有复杂的线程管理。

190

主题

1801

帖子

2096

积分

金牌会员

Rank: 6Rank: 6

积分
2096
QQ
发表于 2005-1-15 23:03:00 | 显示全部楼层

Re:参考:网游服务器端开发心得之网络篇

不是所有的手机都能socket的吧?移动的还是连通的?
估计这位前辈的客户端也是java吧?

8

主题

71

帖子

71

积分

注册会员

Rank: 2

积分
71
发表于 2005-1-16 01:13:00 | 显示全部楼层

Re:参考:网游服务器端开发心得之网络篇

C++可以用ACE, 省时省力

31

主题

630

帖子

635

积分

高级会员

Rank: 4

积分
635
发表于 2005-1-16 08:30:00 | 显示全部楼层

Re:参考:网游服务器端开发心得之网络篇

好文章!
使用哪种语言得具体问题具体分析,C++并非包治百病。

29

主题

421

帖子

436

积分

中级会员

Rank: 3Rank: 3

积分
436
发表于 2005-1-16 09:28:00 | 显示全部楼层

Re:参考:网游服务器端开发心得之网络篇

除了狂吹java并猛扁c++外,没有看到什么内涵东西阿。语言是拿来用的,不是相互扁的。例如手头的手机gb,gbc,md模拟都是c写的,没有见java的阿。现在大多数j2me手机游戏都市抄以前8位/16位游戏机的,一个个抄多累阿,用模拟器玩不就结了。

东西好像不是给移动的吧。GPRS手机大部分也只是支持HTTP或者UPD,TCP要j2me2.0吧。就算手机支持,移动网关不支持http以外的协议吧,不会给上的。

C++更容易把这个项目变成一堆代码噩梦。一句话把c++打死了,好寒心。客户端希望不是用j2me开发的,如果是就麻烦了。拿回来反编译后,客户端方面修改连接参数和logo信息等,服务器照样子画瓢重新做个模拟服务器。嘿嘿,就知道java原来也有缺点噢。努力混淆吧,百吧K的东西,估计也混淆不到哪里去。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-24 02:18

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表