作者darkflier (胖有错吗?)
看板GameDesign
标题Re: [请益] client端的指令(字串)分析
时间Mon Mar 16 19:12:59 2009
突然想回文赚个p币XD
在这种字串的扫描中
绝对不要丢给server去做字串的扫描
应该要在Client端先判定好这个讯息是要干嘛
然後在封包的起始值给予讯息ID
让server去判断这个讯息是否需要解压
取出其中的内容
或是只是单纯的将这封包在转送给画面中的人
不然serve光是处理这些有的没的封包就浪费一堆频宽跟时间了
最简单最没营养的就是对话封包
只要判断讯息是对话然後取得传送对象之後
将内容原封不动以压缩过的资料传出可以省一点点频宽也省了记忆体mapping的时间
不过每个人的习惯都不同有的人觉得这样讯息事件过於庞大
很不好整理
比较喜欢多table去互相索引找出事件
这点就看个人爽了...
※ 引述《green0924 (hmm...)》之铭言:
: 请问一下大家,像一般线上游戏,由server端传资料给client
: ,都是怎麽做字串的分析的呢?
: 我现在都是用很笨的做法,逐字去检查以取得指令的前後端,
: 再由此取得指令与参数,比如说server端传给client这样的字
: 串..
: [cmd]kill monster 1[/cmd]
: 先计算字串长度,再用回圈跑,删除掉[cmd]跟[/cmd],就可
: 以得到 kill monster 1,其中 kill是指令, monster 1 是
: 参数,由此再做动作。
: ex:
: for(i=0;i<sizeof(s);i++){
: if((i+4)>sizeof(s)) break;
: if(s[i..(i+4)]=="[cmd]") start=i;
: if(s[i..(i+5)]=="[/cmd]") end=i;
: }
: 感觉这样的方法效率满差的,尤其当资料量大的时候..XD
: 不知道有没有其他更好的方法呢?
:
: 另外,字串分析时,要是玩家在用聊天功能有出现[cmd]这样
: 的系统字,字串分析就会出问题,所以玩家输入部份,我的
: 方法是限制不可使用系统字,不知道线上游戏都是怎麽做的?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.116.118.21
1F:→ darkflier:刚刚没仔细看原来是serve传给client资料XDDD 03/16 19:14
2F:→ darkflier:不过方法都一样啦不要让费时间在分析以知资料 03/16 19:15
3F:→ darkflier:只有发出讯息的那个人需要去分析即可 03/16 19:15
4F:推 green0924:所以大大意思是,若常重覆出现的讯息或资料就存在client 03/16 19:16
5F:→ green0924:端..ex: A使用技能X攻击B,造成10点伤害. 03/16 19:17
6F:→ green0924:资料就只要传 A atk B,10 这样吗? 03/16 19:17
Orz.....
最近在减肥所以没去吃晚餐就回应你一下好了
讯息的传送
理论上会有几种方法
最基本的封包会有
1.message Event ID
2.subID
3.data size
4.data_content
1.代表这讯息的ID
可能是对话可能是攻击可能是移动....else
ex:
MESSAGE_TALK = 0
MESSAGE_ATTACK = 1
MESSAGE_GAMEOVER = 2
MESSAGE_PLAY = 3
2.subID就不一定会用到 用到的时候大多是快速的再做封包传递的时候使用
例如可能是立即传送给其他玩家或是检查之类的讯息
3.就是这包封包整个的size有多大
看到这里我们可以知道这个封包前面三个资料的大小一定是固定的
所以真正的资料是放在压缩过的封包里面
至於压缩解压缩的过程就不详提看个家做法
所以你现在有问题的部分是死在1
你需要的不是去检查他传过来的字串
是要检查他这个ID是要干什麽的
不过听你的讲法好像你完全不是这样搞Orz.....
像你所提到的
tag 内容 tag/
这时候你要做的是把你的tag编一个ID
然後传送出去
并把内容做好压缩(或不压也看端看资料流量)
所以你收到的讯息之後就立刻知道这ID是要干嘛的
然後就把资料解开去做你要做的事情
以上
不过每个人用法都不同不过都大同小异啦...
如果你相信大家电脑都很好server超级强壮
也是可以直接用字串去判断现在要干嘛就是啦XDDD
不过这样你在判断那边可能......会写到吐血吧
我个人是偏好多table index
这样在写成是比较好理解也可以画出图让人一目了然
每个ID互队的关系...
最後...
我已经四年没写过网路程试
搞不好这套已经落伍很久了XDDDDD
※ 编辑: darkflier 来自: 122.116.118.21 (03/16 19:30)
7F:→ green0924:讯息ID..这个是指.. ex: 1--使用技能a, 2--使用技能b 03/16 19:20
8F:→ green0924:109--跟npc xx对话 03/16 19:20
9F:→ green0924:类似这样的东西? 03/16 19:20
10F:推 NDark:简单有简单的作法,难有难的作法.也不一定全部都查表. 03/16 19:21
11F:推 green0924:终於了解了,於来是这样子的用法,这样就不用逐字分析了 03/16 19:42
12F:→ green0924:谢谢大大的说明罗~^_____^ (这篇板主应该要M起来的) 03/16 19:43