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,拼接时会占字节长度,但是解包后没有具体内容。
  1. var dgram =require("dgram");
  2. var client =dgram.createSocket("udp4"); //服务端 ipv4这里修改  udp6就是ipv6
  3. var cmd =Buffer.alloc(1)
  4. var act =Buffer.alloc(1)
  5. var buf1 =Buffer.from("game")
  6. var buf2 =Buffer.from("数据报")
  7. var message = Buffer.from('game数据报');//1个中文3个字节 9个字节
  8. var ca =Buffer.concat([cmd,act,message]) //1个字节+1个字节+13个字节 1个中文3个字节
  9. dateChunks =[ca,buf1,buf2]
  10. client.send(dateChunks,40000,'localhost',function (error) {
  11.     console.log("客户端发送ca长度:%s和内存块长度:%s和内容:",ca.length,dateChunks.byteLength,dateChunks)
  12.     client.close();
  13. })
复制代码
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个服务端的代码,具体如下:

  1. var dgram =require("dgram");
  2. var socket =dgram.createSocket("udp4"); //服务端 udp4
  3. //地址族的ANY地址(IPv4'0.0.0.0'或IPv6'::')

  4. socket.on('listening',function () {
  5.     var address =socket.address();
  6.     console.log("服务器监听 %s:%s",address.address,address.port)
  7. })

  8. socket.bind(40000,function () {
  9.     socket.setMulticastInterface('10.0.0.2'); //ipv4 组织不匹配的接口,本地发送格式和这个匹配
  10. });//port未指定会是随机端口

  11. socket.on('error',function (error) {
  12.     console.log("服务器出现异常",error.stack)
  13.     server.close(callback());
  14. })


  15. socket.on("message",function (msg,rinfo) {
  16.     console.log("服务器收到msg-->%s,发送方的IP%s:端口%s",msg,rinfo.address,rinfo.port)
  17.     console.log("发送方过来数据报的大小:%s,地址类型:%s",rinfo.size,rinfo.family)
  18. })
复制代码
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