游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5295|回复: 10

关于网络游戏的数据包的生成……

[复制链接]

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
发表于 2004-9-5 23:56:00 | 显示全部楼层 |阅读模式
我原来想的是……在需要发送数据包时通过代码直接操作buffer来生成数据包……但是后来又一想,如果数据包有很多种,那么这个编码的过程岂不是要花很多时间?而且以后如果要修改数据包结构的话也会很麻烦……看来看去,觉得似乎这种方法可以称为“硬编码”,也就是把数据包的结构直接体现在代码里……假如能编程软编码,比如用字符串来定义一个数据包的结构……
但是具体的还是不知道该怎么办……而且软编码的话感觉在处理数据包时可能会遇到问题……
大家是怎么做的? [em24]

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2004-9-6 02:08:00 | 显示全部楼层

Re:关于网络游戏的数据包的生成……

硬编码配合软编码

类似包头这样的结构,直接硬写就好,长度啊,消息类型啊,之类的,一百年不变的。

具体的消息结构,让脚本去做,你就只按照长度分配内存就好。

68

主题

710

帖子

719

积分

高级会员

Rank: 4

积分
719
QQ
发表于 2004-9-6 09:17:00 | 显示全部楼层

Re:关于网络游戏的数据包的生成……

很不错

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
 楼主| 发表于 2004-9-9 19:27:00 | 显示全部楼层

Re: 关于网络游戏的数据包的生成……

我后来又想了一下:
让所有对数据包响应的函数都是某个对象的成员函数,这样,无论是什么数据包,其核心任务就是要求客户端调用某个对象的某个成员函数,并输入一个或一些参数,这样,数据包的内容其实就是“对象标识 | 函数标识 | 参数”(暂称它为“数据单元”)(如果函数需要多个参数就把这些参数顺序连接成一个数据块,并把这个数据块传给函数,这样响应函数的原型就能统一起来了),当然在每个标识数据段的前面都有一个四字节(当然也可以在客户端连接到服务器时临时与服务器协商这个长度)的int来说明数据段的长度。
但是也许有时一个数据包里会调用多个对象的多个函数,如果为每一次调用都建立一个上述的数据单元,也行,但是如果调用了同一个对象的多个函数,这时如果把这样的一些数据单元融合起来,也就是先说明一个对象标识,接着就跟着好几组“函数标识 | 参数”,这样就能省略不少对象标识数据所占用的空间和网络带宽,不过这样的话数据包的组织规则就得改了,如果把“对象标识 | 函数标识 | 参数 | 函数标识 | 参数 | 函数标识 | 参数……”这样的融合后的结构也叫做“数据单元”,那么相对于原来结构的变化就是现在每个数据单元之前都要增加一个四字节的int来说明这个数据单元的总长度或者是其中有多少组“函数标识 | 参数”这样的调用,所以在节省了一些对象标识所占用的空间的同时也增加了一些int所占用的空间,这样我就搞不清这样做是否会得不偿失,毕竟对象标识可能也只是一个四字节的int……应该怎么比较这两种结构?前者没有进行优化但也能基本满足需求,而后者进行了“优化”我却无法判断是否得不偿失……

29

主题

421

帖子

436

积分

中级会员

Rank: 3Rank: 3

积分
436
发表于 2004-9-9 19:38:00 | 显示全部楼层

Re: 关于网络游戏的数据包的生成……

给你一个网站地址,你可以去看看。有很多资源可以借鉴。

http://bbs.99nets.com
一个专门研究制作网络游戏服务器模拟器的地方。

我推荐你去下载WoWPython-0.8.8东西。应该说魔兽世界的报文结构都破解的一清二楚了。有时间去研究一下会大有进步。

另,你后来想到的东西,我觉得差不多好像就是那么回事。

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
 楼主| 发表于 2004-9-9 20:19:00 | 显示全部楼层

Re:关于网络游戏的数据包的生成……

晕,kingmark,那个论坛我看了一下,发现……wow的封包分析……看不懂……

29

主题

421

帖子

436

积分

中级会员

Rank: 3Rank: 3

积分
436
发表于 2004-9-9 20:34:00 | 显示全部楼层

Re:关于网络游戏的数据包的生成……

那些封包分析是做参考资料看的。去下载那个WoWPython-0.8.8源代码看阿[魔兽世界C++写的SF]。代码还算清晰,虽然没有什么注释。如果有不是很明白的地方,我倒是可以帮忙。最近学习正在学习网络编程,模仿做了一个窗口客户端程序,可以连接这个SF,进行些我觉得差不多的指令操作,很遗憾弄不到WOW账号,不能连接WOW服务器测试。

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
 楼主| 发表于 2004-9-9 20:53:00 | 显示全部楼层

Re: 关于网络游戏的数据包的生成……

一般来说……看源代码是我最……有时我宁愿到处问人也不想看代码~~ [em10]
毕竟太累了……而且有时还要东猜西猜的……

29

主题

421

帖子

436

积分

中级会员

Rank: 3Rank: 3

积分
436
发表于 2004-9-9 21:06:00 | 显示全部楼层

Re: Re: 关于网络游戏的数据包的生成……

sjinny: Re: 关于网络游戏的数据包的生成……

一般来说……看源代码是我最……有时我宁愿到处问人也不想看代码~~ [em10]
毕竟太累了……而且有时还要东猜西猜的……


有些东西需要实战才知道。特别是你刚才提到的两种方式,不写代码然后做压力测试,恐怕很少有人知道优劣。网络游戏对同步比较高,我觉得程序方面大部分精力可能到放在这个方面,有些时候A方案可能好,有些时候B方案优点多,这个需要对主题游戏内容进行考虑。

wow采用类似这样的结构发送消息
struct samplemsg{
DWORD dwWhichCmd;
DWORD dwLen;
//data[里面数据组织的非常COOL]
};

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
 楼主| 发表于 2004-9-9 21:25:00 | 显示全部楼层

Re: Re: Re: 关于网络游戏的数据包的生成……

kingmark: Re: Re: 关于网络游戏的数据包的生成……



有些东西需要实战才知道。特别是你刚才提到的两种方式,不写代码然后做压力测试,恐怕很少有人知道优劣...


[em7]
恩……看来我最好把两种都实现出来……反正我做的只是一个网游服务器端的通用部分,到时候到底用哪种就让二期开发的人来决定吧~偶不管啦~~ [em13]

不过……
wow采用类似这样的结构发送消息
struct samplemsg{
DWORD dwWhichCmd;
DWORD dwLen;
//data[里面数据组织的非常COOL]
};

最后那一行是什么意思?? [em24]

另外这个结构似乎还是不能反映wow组织数据包的规则啊~

我在做的是一个网游服务器端的通用部分,如果能做成预想的那样的话就可以让二期开发人员写一些动态连接库,然后让我这个程序载入这些连接库就可以了,我的程序是与游戏内容无关的,连接库里则主要是一些游戏类的定义(比如Sor、Nec这样的类,里面有这种对象的种种响应函数等……),我就得确定一个比较好的数据包组织规则,这样二期开发人员就可以少花时间在数据包的处理上了……
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-18 08:26

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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