51Testing软件测试论坛
标题:
游戏数据流 第2讲
[打印本页]
作者:
jiazurongyu
时间:
2018-7-4 16:45
标题:
游戏数据流 第2讲
游戏分为可靠数据流传输 和不可靠的数据流传输
python语言的会和C++的比较像,node.js来说只要是对于库的选择
了解选择的库
tcp用网上或者自己封装处理二进制的bytebuffer的库+net库。
udp用上前面一样的处理二进制的库+dgram。
二进制处理的 -->
https://github.com/play175/ByteBuffer
具体需要根据自己业务来修改。
这里简单描述下关于udp的,拿的是官方的例子,改了下。
常规做法 需要1个client端,1个服务端,自己和自己玩。先启动服务端bind后处理监听。客户端send消息,服务器recv消息后,打印在服务器本地或者应答
客户端。
客户端Buffer.alloc(n) n为占多少个字节但都是填充到0,拼接时会占字节长度,但是解包后没有具体内容。
var dgram =require("dgram");
var client =dgram.createSocket("udp4"); //服务端 ipv4这里修改 udp6就是ipv6
var cmd =Buffer.alloc(1)
var act =Buffer.alloc(1)
var buf1 =Buffer.from("game")
var buf2 =Buffer.from("数据报")
var message = Buffer.from('game数据报');//1个中文3个字节 9个字节
var ca =Buffer.concat([cmd,act,message]) //1个字节+1个字节+13个字节 1个中文3个字节
dateChunks =[ca,buf1,buf2]
client.send(dateChunks,40000,'localhost',function (error) {
console.log("客户端发送ca长度:%s和内存块长度:%s和内容:",ca.length,dateChunks.byteLength,dateChunks)
client.close();
})
复制代码
Buffer.from(数组)传入是字符串,会把他内部转成1个数组list。具体请看dateChunks是1个[]类型,dataChunks内部进行了拼接。
核心代码发送出去client.send(dataChunks,server_port,server_ip)
client.close()代表发送后关闭。
注意看
dateChunks打印出来的是 其实是3个obj对象,因为对应
dateChunks =[ca,buf1,buf2],这边打印出去的是[
<Buffer 00 00 67 61 6d 65 e6 95 b0 e6 8d ae e6 8a a5>, <Buffer 67 61 6d 65>,<Buffer e6 95 b0 e6 8d ae e6 8a a5> ]是3个对象缓存二进制的列表。
目前还不能运行,在建立1个服务端的代码,具体如下:
var dgram =require("dgram");
var socket =dgram.createSocket("udp4"); //服务端 udp4
//地址族的ANY地址(IPv4'0.0.0.0'或IPv6'::')
socket.on('listening',function () {
var address =socket.address();
console.log("服务器监听 %s:%s",address.address,address.port)
})
socket.bind(40000,function () {
socket.setMulticastInterface('10.0.0.2'); //ipv4 组织不匹配的接口,本地发送格式和这个匹配
});//port未指定会是随机端口
socket.on('error',function (error) {
console.log("服务器出现异常",error.stack)
server.close(callback());
})
socket.on("message",function (msg,rinfo) {
console.log("服务器收到msg-->%s,发送方的IP%s:端口%s",msg,rinfo.address,rinfo.port)
console.log("发送方过来数据报的大小:%s,地址类型:%s",rinfo.size,rinfo.family)
})
复制代码
Node.js特性是要前后端几乎一致,所以客户端和服务端都要写
dgram.createSocket。
其他可以看注释。
rinfo.address,rinfo.port来源的ip和端口,这个端口每次运行会变。
rinfo.size是核心,和前面client里面传入的send(datachunks)的长度一致,单位是字节。
bind对象后
setMulticastInterface匹配 ipv4是用(0.0.0.0) ipv6是(:
的模式
作者:
changliangbei
时间:
2018-7-5 09:04
游戏怎么做接口测试,模拟各种类型数据
作者:
jiazurongyu
时间:
2018-8-31 17:57
changliangbei 发表于 2018-7-5 09:04
游戏怎么做接口测试,模拟各种类型数据
你是说填写数据的参数吗。一样啊
比如pb pb结构体解析出来后,会有各种类型的。
生成的数据按这个数据类型写,不要超出长度就行。
我的方式是 有个随机造数据的函数,第一个参数定义长度,0为null,第二个参数是定义数据类型的。
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2