QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: deaboway

创建适合网络游戏使用的套接字类库

[复制链接]
发表于 2003-10-13 11:05:49 | 显示全部楼层
deaboway兄把你网络部分的原代码贴上来啊,还有就是cvs怎么用?给个网站我学一下,先来个基本的,老没弄明白真郁闷。
回复

使用道具 举报

发表于 2003-10-13 11:07:48 | 显示全部楼层
[quote:447afb4806="deaboway"]今天考完了高级程序员,不知道能不能顺利通过……无论如何感觉轻松了很多 不过我们有几个课程设计要做了——有我说过的小世界模型,Ems加密算法,还有我又加入了学校的PDA兴趣小组,我负责操作系统的开发,有机会我会把前两个放上来,第三个因为不是我说了算,应该没机会了
无论如何,在11月份前,我会拿出可行的网络模块方案,请大家给予支持和鼓励   [/quote]
越看越惭愧,大学我什么都没干,玩了4年,哎,浪费。真想重载我的大学!
回复

使用道具 举报

发表于 2003-10-13 12:38:25 | 显示全部楼层
呵呵,关于加密,还得注意一下效率~~
我想,只要能保证网络连接的安全性,再靠规则模块的检测,应该就没有什么问题了~~

关于CVS什么的,你可以到google去搜索一下,另外看看这些:
http://gro.clinux.org/project/showfiles.php?group_id=3&release_id=293
回复

使用道具 举报

 楼主| 发表于 2003-10-13 19:10:58 | 显示全部楼层
rocklgk兄又客气了,呵呵……
我今天仔细想了一下整体的过程,从客户端的鼠标和键盘消息的收集-数据的加密、压缩和打报-通过我们现在完成的网络部分传到服务器端-服务器端处理(包括与数据库的交互和与相关的其他客户的交互)-在通过网络部分……最终实现交互。
要明确的首先应该是我们是肥服务器瘦客户端,客户端仅负责发送/接收消息(鼠标、键盘还有坐标!)那么客户端仅需要地图、声音等资源和对消息的表现而已。
还有就是一个用户的消息发到服务器端后,服务器端要向多少个客户端发消息的问题,这也是前面提到坐标的原因——如果其他用户的屏幕看不到该用户,该用户看不到其他用户和机器人以及其他能动的东西——就不用发消息了~
网络模块我想还是使用TCP吧,这样比较方便,不然每一次传送消息时都要包括一大堆认证信息,而且在服务器端还要查找对应的数据库文件,不方便
过两天我再把详细的思路说说,作个参考   
回复

使用道具 举报

 楼主| 发表于 2003-10-13 19:17:00 | 显示全部楼层
哦,还有加密忘记说了,我问了我的一位做网络通讯的朋友,据他说可以使用网络协议通用加密MD5,我会找这方面的资料看看~
回复

使用道具 举报

发表于 2003-10-13 23:22:50 | 显示全部楼层
关于整体响应过程:
客户端接受了用户输入后,先会做初步处理,比如找出一个大范围魔法所应该命中的对象,然后把这些对象一起发给服务器,服务器只要从中把不应该命中的对象去除然后就可以执行了,这样服务器就不用再去搜索了。
回复

使用道具 举报

 楼主| 发表于 2003-10-15 21:36:41 | 显示全部楼层
网络模块整体构架——未完成,先发上来

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

发表于 2003-10-24 00:05:01 | 显示全部楼层
http://www.linuxfans.org/nuke/modules/Forums/files/d_3.png
在上面那个图片中,从Internet来的data经过unpack后,得到了object(id)和message,我想,也许可以扩展一下,一个data里可以有多个object(id)和message,也就是说,unpack后得到的是{object(id)}和{message}这两组数据。
这样,这两个数据组之间就会有对应关系:
(从id到message的对应关系):
1对1
多对1
1对多
多对多

其中,1对1是最基本的对应关系。
多对1,它的典型应用是大范围的魔法,也就是同时对多个对象产生了作用。

1对多,可以理解为一个任务队列,也就是用户(客户端)一次性发出了多个操作请求(顺序相关)。
多对多,我目前还不知道怎么理解。如果不使用这种对应关系,那么就得在程序里建立一个筛选的机制。
这两种对应关系,我还在犹豫,是使用,还是忽略这样的数据。

另外,考虑到游戏里的一些重复操作,比如反复地练习使用某个魔法,不停地制造某个物品,或制造一定数量的物品,这些操作,每次都是一样的操作请求,事实上,目前的网络游戏里,很多玩家都使用连点器来挂机,但是这样还是要占用网络带宽和服务器处理网络的资源,所以干脆,如果要在哪练习某个技能,也就是挂机,那么向服务器明说就是了,用户说运行这些指令多少次或一直运行下去,然后就不需要网络操作了。
我把相关的东东总结了一下(主要是一系列的操作请求的特点):
展开态:比如有n个操作请求,那么就向服务器发出n个data。
折叠态:比如有n个相同的操作请求,那么只向服务器发出一个data,其中包含的内容是:操作请求,执行的次数。

展开态中还有两种:把n个操作请求分别发出;把n个操作请求放进一个data里发送出去。
折叠态中也有两种:反复执行的只是一个操作请求;反复执行的是一些操作请求。

这样便有了几个问题:
各个状态间的转换
每个状态的运行态

目前我的难点在于:折叠态的运行态不知道该怎么实现。因为要把折叠态的一系列操作请求作为数据保存在执行者的队列中,而且每个原子操作都是要“花时间”的(不然一个折叠态的操作就完成了外挂的加速功能了 ),所以不能使用for循环之类的了,那么最容易想到的是这样的方案:对于反复执行的一个请求,在这个队列元素中增加一个数据成员以保存还要执行多少次,于是执行时,先检测还要运行多少次,只要大于0那么就再运行一次,并且使这个次数减1,如果这个次数为0,那么就不运行并且将当前队列元素删除转而运行下一个队列元素。这个方案我不太满意,因为每次运行都有计数操作,在一个有几大百玩家和N个NPC的网络游戏里,这样的计数操作我很担心其对性能的影响。

各位发表发表意见吧~
回复

使用道具 举报

发表于 2003-10-24 22:51:19 | 显示全部楼层
没人回贴?
我顶!
回复

使用道具 举报

发表于 2003-10-26 23:28:03 | 显示全部楼层
再顶!
回复

使用道具 举报

 楼主| 发表于 2003-10-28 14:59:07 | 显示全部楼层
呵呵,找工作真的很烦恼呐~   
先帮sjinny再顶一下
回复

使用道具 举报

发表于 2003-10-28 23:16:01 | 显示全部楼层
ID与Message之间的对应关系,我已经理顺了:
1个ID对应1个Message:原子操作,是服务器端执行客户端请求时的最小单位;
例如:作用于单个目标的魔法;

1个ID对应多个Message:原子操作的简单集合(串联),是服务器端执行客户端批量请求时的最小单位;
相当于简单脚本;

多个ID对应1个Message:原子操作的简单集合(并联),是服务器端执行客户端的多目标请求时的最小单位;
例如:大面积杀伤的魔法;

多个ID对应多个Message:批量操作的简单集合(串联),是服务器端执行客户端批量请求时的复合单位。
相当于复杂脚本。
回复

使用道具 举报

 楼主| 发表于 2003-11-4 21:30:31 | 显示全部楼层
sjinny, 折叠态是啥么意思,没搞明白,看得很糊涂啊~ :-(
回复

使用道具 举报

发表于 2003-11-4 21:47:43 | 显示全部楼层
ft,好久没来了,原来大家进展已经这么快了,都不知道自己能帮上什么忙了
回复

使用道具 举报

发表于 2003-11-4 23:18:01 | 显示全部楼层
Austern, 常回来看看就好~~

deaboway,
“折叠态:比如有n个相同的操作请求,那么只向服务器发出一个data,其中包含的内容是:操作请求,执行的次数。 ”
比如,客户端发给服务器的数据包中是这样的:
<Message><次数>
比如<购买一个宝石><10>就表示用户要购买一个宝石10次,即购买10个宝石
也就是告诉服务器,要做什么事情,并且要做多少次;因为不是买10个宝石就发送10个一模一样的数据包,而是把这些信息“折叠”起来,所以我叫它“折叠态”,相对的“展开态”就是发送10个“购买一个宝石”的数据包,但是这样就会占用更多的带宽~
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-3-29 00:44 , Processed in 0.096534 second(s), 13 queries .

© 2021 Powered by Discuz! X3.5.

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