白话skynet第二篇:skynet的通信调试pack和sprotol
今天来说说Skynet客户端和服务端网络通信的基础部分。
Skynet当前版本。lua是skynet自带的5.3版本。
根据示例,我们可以知道。通信的步骤如下。
- 客户端按大小端打包成二进制。
- socket发送。
- 服务端接收。
服务端解包。
逐个说说这其中的操作方法。1.第一步
local result = string.pack(">s2","string2pack")
pack > 表示按大端顺序。s2 表示按照2个字节打包。我们知道string由char组成。1个char 是 0-255 之间的数,2^8 ,1char=8byte. 1byte=1位0/1.
需要注意的是,他除了被打包的部分之外,还会在前面加2个字节,表示长度。
如果要打包一个数字则需要转换。由2种办法
string.pack("I2",number),会在前面二进制加2位表示长度的东西。
2.第二步
socket.send
3.服务端接收
gateserver已经有接收的代码了。
注意的是,socket会自动按pack的数据分段接收。也就是会根据pack的前面2位得到size。根据size去接收后面的数据。然后向上传递一份message。
接收到的message已经是去掉了前面2位的数据。
4.客户端接收
客户端接收到的数据目前我是用skynet提供的“client.socket”.没有netpack可用。
接收到的数据需要自行去除前面的2个字节的数据(string.pack产生的)。
这样算是完成了基础版本的通信。以上的实验可以通过在服务端和客户端最终发出和最初的接收的地方加校验码做测试。【参考这2个链接打印二进制】
但是这样是不够的。我们还需要找一套协议,比如sprotol。本来说sprotol就够了。但是一般来说,各种通信协议,都是分为控制校验和数据层两块。
比如示例中就加多了一个数据大小和session的设计。sprotol不用说简单易用,区分好客户端和服务端加载的顺序即可。
至于控制层依据个人习惯,一般来说,开头的地方拼接二进制就行。session还是有点用的,如果同一个客户端对同一个session多次发送
,可以在session级别做缓冲,减轻服务器压力,具体代码可以参见示例。也可以加标志位,作为是否加密等等。校验码,用来在gate层过滤垃圾消息。
但是其实这些都可以做到sprotol中去,作为一个公共的字段,但是没见sprotol支持这种写法。可以上述方法或者直接在sprotol中加字段实现。
但是在sprotol中加字段,将暴露给上层应用,不太符合网络协议设计的分层控制的思想,总之需要对sprotol做一些改动才行。
白话skynet第二篇:skynet的通信调试pack和sprotol的更多相关文章
- [转载] Fiddler为所欲为第二篇 像OD一样调试 [二]
首先,如果大家没有看过第一篇,可以先看看第一篇,了解Fiddler script的脚本哦.传送门:https://www.52pojie.cn/thread-854434-1-1.html 导语:其实 ...
- WebApi学习总结系列第二篇(webapi的调试)
目前使用webapi的调试主要有 1.用接口宿主调试.(宿主形式多样:web.winform.还有就是直接用app进行接口调试) 2.用Fiddler抓Http信息,进行调试. 1.用接口宿主调试. ...
- 白话skynet第一篇
当你走过一个坐在自己店门前的杂货商面前.走过一个吸着烟斗的守门人面前,走过一个马车夫面前时,请你给我描绘一下这个杂货商.守门人和马车夫,他们的姿态,他们的外貌,要用画家那样的细节描绘出他们的精神本质, ...
- 从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)
从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...
- 第二篇 :微信公众平台开发实战Java版之开启开发者模式,接入微信公众平台开发
第一部分:微信公众号对接的基本介绍 一.填写服务器配置信息的介绍 登录微信公众平台官网后,进入到公众平台后台管理页面. 选择 公众号基本设置->基本配置 ,点击“修改配置”按钮,填写服务器地址( ...
- 第二篇 Integration Services:SSIS数据泵
本篇文章是Integration Services系列的第二篇,详细内容请参考原文. 简介SSIS用于移动数据.数据流任务提供此功能.因为这个原因,当介绍SSIS时我喜欢从数据流任务开始.数据流任务的 ...
- chromium浏览器开发系列第二篇:如何编译最新chromium源码
说一下为什么这么晚才发第二篇,上周和这周department的工作太多了,晚上都是十点半从公司出发,回家以后实在没有多余的精力去摸键盘了.所以请大家包涵! 上期回顾: chromium源码下载: 1. ...
- [老老实实学WCF] 第五篇 再探通信--ClientBase
老老实实学WCF 第五篇 再探通信--ClientBase 在上一篇中,我们抛开了服务引用和元数据交换,在客户端中手动添加了元数据代码,并利用通道工厂ChannelFactory<>类创 ...
- JDFS:一款分布式文件管理实用程序第二篇(更新升级、解决一些bug)
一 前言 本文是<JDFS:一款分布式文件管理实用程序>系列博客的第二篇,在上一篇博客中,笔者向读者展示了JDFS的核心功能部分,包括:服务端与客户端部分的上传.下载功能的实现,epoll ...
随机推荐
- python实现简单的购物车
import json,timeuserinfo={"lanfei": { "passwd":"lanfei", "salary& ...
- Hive SemanticException
hive, sex='boy'); FAILED: SemanticException Line : Invalid path ''/root/data/hdata.txt'': No files m ...
- kth min_max容斥
题解: 普通的$min-max$容斥是用来求最后出现元素的期望之类的 $kth min-max$容斥进一步解决倒数第k个出现的元素的期望 给出公式: $kthmax(S)=\sum\limits_{T ...
- k-近邻算法概述
2.1 k-近邻算法概述 k-近邻算法采用测量不同特征值之间的距离方法进行分类. 优点:精度高.对异常值不敏感.无数据输入假定. 确定:计算复杂度高.空间复杂度高. 适用数据范围:数值型和标称型. 工 ...
- pycharm中join的应用
学习python这几天发现jion的两种用法 li = "alexericrain" v = ["_".join(li)] print (v) #第一种输出结果 ...
- Cow Relays POJ - 3613 (floyd+快速幂)
For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race usin ...
- 大数据技术 - MapReduce 应用的配置和单元测试
上一章的 MapReduce 应用中,我们使用了自定义配置,并用 GenericOptionsParser 处理命令行输入的配置,这种方式简单粗暴.但不是 MapReduce 应用常见的写法,本章第一 ...
- HTML(五)
HTML5新结构标签 h5新增的主要语义化标签如下: 1.header 页面头部.页眉2.nav 页面导航3.article 一篇文章4.section 文章中的章节5.aside 侧边栏6.foot ...
- MAC下 mySQL及workbench安装
1.首先去mysql 网站下载安装包,https://dev.mysql.com/downloads/mysql/ 选择第一个.dmg格式的下载安装 2.安装完成后,在System Preferenc ...
- (62)Wangdao.com第十天_JavaScript 变量的作用域
在 js 中有两种作用域:全局作用域,局部作用域. 全局作用域 直接写在 <script> 标签中的变量和方法. 在网页打开时创建,在网页关闭时销毁. 全局作用域有一个全局对象 windo ...