游戏开发论坛

 找回密码
 立即注册
搜索
查看: 10226|回复: 9

请问网络游戏一个数据包一般设定多大合适?

[复制链接]

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
发表于 2012-6-27 23:05:00 | 显示全部楼层 |阅读模式
如题。。。。
我一直用的是4K

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20468
发表于 2012-6-27 23:08:00 | 显示全部楼层

Re:请问网络游戏一个数据包一般设定多大合适?

这个要看用在什么地方了,如果只是一个简单的走路,用个4k,那稍微多了一些。

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
 楼主| 发表于 2012-6-27 23:26:00 | 显示全部楼层

Re: Re:请问网络游戏一个数据包一般设定多大合适?

sea_bug: Re:请问网络游戏一个数据包一般设定多大合适?

这个要看用在什么地方了,如果只是一个简单的走路,用个4k,那稍微多了一些。



我说的是上限,上限得有个设定吧?

58

主题

1437

帖子

2207

积分

金牌会员

Rank: 6Rank: 6

积分
2207
发表于 2012-6-28 00:09:00 | 显示全部楼层

Re:请问网络游戏一个数据包一般设定多大合适?

固定大小肯定不行,tcp协议的上限几乎是个无穷大。
4k太小了一般宽带最小是51.2k,加个报警日志就可以。
除非打算用客户端协议下补丁包,这个问题可以不用考虑。

71

主题

1330

帖子

2585

积分

金牌会员

Rank: 6Rank: 6

积分
2585
发表于 2012-6-28 09:21:00 | 显示全部楼层

Re:请问网络游戏一个数据包一般设定多大合适?

看什么游戏了,我打一局10分钟的坦克世界,总流量在3M左右。

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
 楼主| 发表于 2012-6-28 12:19:00 | 显示全部楼层

Re:请问网络游戏一个数据包一般设定多大合适?

如果没有上限的话,那么所有的网络包就不好管理了,
比如我调一个函数去发一个包,但是我当时不能立即发出去,我需要先压栈存下来,这时候,如果网络包的大小没有上限的话,那么就麻烦了,因为如果每发一个包都要申请一个内存去存这个包,总会影响到效率,而且也不可能去保存调用者传来的包的内存指针。

PS:用重叠IO模型去发送一个网络包时,必须要等到这个网络包发送完毕才能发下一个包,所以,为了节省重叠数据,就得把所有要发的包压栈,然后排队一个一个去发。

58

主题

1437

帖子

2207

积分

金牌会员

Rank: 6Rank: 6

积分
2207
发表于 2012-6-28 13:09:00 | 显示全部楼层

Re: Re:请问网络游戏一个数据包一般设定多大合适?

这个就是你的另一误区,你new一个内存究竟会多影响效率。
你可以new,1万个内存出来然后看用了多少时间。
假设用了1秒钟,然后看你1秒钟能发一万个包不?
其实send这个函数如果是异步方式本身就会new内存,
如果是同步方式也会堵在io上反正比new慢多了。
还有一种算法你可以借鉴下,
如果实在无法预测缓冲区的上限是多少,
可以每次比较下,
在每个线程分配一个4k的内存,如果数据比4k大就重新分配一个更大的内存,释放旧的内存。
这样这块内存会一直变大直到满足你最大数据的需求。
再怎么大也不会把系统内存都用光吧....
如果你每次发送数据都启动一个新线程,哪就该好好再检讨下,
开新线程的效率非常非常低,比分配内存的效率低几个量级。
微无渊: Re:请问网络游戏一个数据包一般设定多大合适?

如果没有上限的话,那么所有的网络包就不好管理了,
比如我调一个函数去发一个包,但是我当时不能立即发出...

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
 楼主| 发表于 2012-6-28 13:20:00 | 显示全部楼层

Re:请问网络游戏一个数据包一般设定多大合适?

多谢楼上提醒。

看来,网络包的一般设计都是不限制字节上限的。
以后得这么去设计。

内存分配倒是很简单,直接仍给内存分配器去做。而不是用malloc之流。

2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

积分
66489
QQ
发表于 2012-6-28 13:48:00 | 显示全部楼层

Re:请问网络游戏一个数据包一般设定多大合适?

tcp底层的原始包大小上限是1k多一点,比如2K肯定是要分2次。

发包是很慢的,如果包是1.1k/1.2k这种,那就想尽办法压到1k吧!

但是你发0.1k和发1k是没什么差别的。主要影响在于高并发时,你从内存向网卡缓存copy时所需耗掉的时间和应用级别切换以及加锁。

58

主题

1437

帖子

2207

积分

金牌会员

Rank: 6Rank: 6

积分
2207
发表于 2012-6-28 14:05:00 | 显示全部楼层

Re: Re:请问网络游戏一个数据包一般设定多大合适?

这个就是老程序员的惯性思维了,
多发两个包其实也无所谓,像网络游戏,
发1万个包里面这种1.2和1.1的包所占比例是极小的。
为这种极小比例的包每个发包前都要做检查,
虽然检查消耗的效率也很低,但增加的垃圾代码会让整个工程看起来很怪异。
一个游戏的封包有几千个,很多包还是非固定大小的,加个zip压缩什么。
如果一个2.1k的刚好优化到1.1k咋办><
这种有点优化过度的味道。
hyzboy: Re:请问网络游戏一个数据包一般设定多大合适?

tcp底层的原始包大小上限是1k多一点,比如2K肯定是要分2次。

发包是很慢的,如果包是1.1k/1.2k这种,那就...

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

本版积分规则

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

GMT+8, 2025-2-28 03:17

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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