游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2576|回复: 7

数据包的接收

[复制链接]

6

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2005-1-21 22:09:00 | 显示全部楼层 |阅读模式
在网络游戏中 发送数据包是很频繁的
比如说现在服务端有5个消息同时到达  打个比方是同一时间到达,
那服务端的缓冲区中的数据是否是这5个消息的叠加?
我的意思是   是否把这5个消息合并当作一个消息发送到服务端了??
如果不是 那是否是服务端在遇到这样的情况的时候进行选择性的先后收取信息?
具体怎样?谢谢~

新年快乐~!和家欢乐~!

29

主题

421

帖子

436

积分

中级会员

Rank: 3Rank: 3

积分
436
发表于 2005-1-21 22:33:00 | 显示全部楼层

Re:数据包的接收

同时到达,是假象,不能这样理解或者解释。
假设每个消息的长度是10个字节,发送频繁的话,服务器recv的时候,你完全有可能一次recv到50个字节,也就是你说的所谓这5个包一起到达了。
如果recv你指定每次只获取1个字节,你还需要recv50次呢。呵呵,也不能说这些报文分50次到达。

recv后,这些接收到的内容你需要自己解析处理。

如果客户端发送报文的顺序是,1-2-3-4-5,服务器做不到先recv5的那个报文,在去recv3或者其他。它的到达顺序必然是1-2-3-4-5,如果一定要排序,你只有接收后,自己解析排序。

兄弟,我建议你先写一个简单的c/s模式的聊天程序(如果觉得麻烦,或者可以干脆从网上找个类似功能的源代码,抄写一遍),然后不断调试个2天。这样做可能要比先问进步来的快些。

6

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
 楼主| 发表于 2005-1-21 22:43:00 | 显示全部楼层

Re:数据包的接收

恩恩~看了后有点明白,听你的,先做个模型出来~谢谢!!

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20686
发表于 2005-1-22 17:03:00 | 显示全部楼层

Re:数据包的接收

首先不可能“同时”,你可以内建一个消息队列,然后把消息压栈,再一个一个处理,当然,如果你可以进行消息过滤叠加,那就可以另外处理。

9

主题

121

帖子

121

积分

注册会员

Rank: 2

积分
121
QQ
发表于 2005-1-25 11:29:00 | 显示全部楼层

Re:数据包的接收

补充,采用协议不同情况也是完全不一样的,例如 TCP 的消息是保证顺序的,且是stream,按它的需要进行切分,没有边界,不能用你说的1,2,3,4,5这样的概念来理解了。

例如你发送数据的顺序是1,2,3,4,5 发送时tcp会把数据变成123,45,而到你server收到数据的时候可能是1234,5

如果你用udp那么数据包的排序是肯定要做的

31

主题

630

帖子

635

积分

高级会员

Rank: 4

积分
635
发表于 2005-1-25 11:50:00 | 显示全部楼层

Re:数据包的接收

这是速度问题,速度问题应放在功能问题的后面。
合并了之后会快一些。只要别达到好几K就行。
其实,DXPlay挺好的,他都给你封装了。简单的用途可以满足。

8

主题

130

帖子

156

积分

注册会员

Rank: 2

积分
156
发表于 2005-1-31 09:36:00 | 显示全部楼层

Re:数据包的接收

宏观上看是并行、同时的。 微观上看是串行的。主要取决于看你的粒度划分。

所以,就是一个一个处理的。

8

主题

130

帖子

156

积分

注册会员

Rank: 2

积分
156
发表于 2005-1-31 09:42:00 | 显示全部楼层

Re:数据包的接收

吃喝说的不错。

不过系统的UDP并不保序,而且也不保证不丢失数据包,所以即使你发的是1-2-3-4-5,服务器的收到顺序可能是他们的任意组合。比如 5-4-3-2-1、或者 3-5-1。只是局域网丢失的可能比较小,不那么明显。

如果不用数据包,而用TCP报文的话,TCP本身会为你保序和保证到达。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-24 06:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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