TCP_DB_中间件_数据打包格式
ZC: 这里约定的是,C和S之间 传输的TCP数据包的格式
1、TCP数据包 打包格式
1.1、TCP包长度(int32) + TCP包序号(int32) + TCP包类型(int32) + TCP包内容
1.1.1、长度说明:这里的“TCP包长度”是包含 TCP包头 和 TCP包内容 的总的长度
ZC: 实际上 TCP包头 只要 “TCP包长度”就可以了,后面跟的都是 TCP包内容,这样才是 脱离业务逻辑的更为通用的处理方式
2、数据库结果集 打包格式
2.1、结果集头
2.1.1、总长度(int32) + 列数(int32) + 行数(int32) + 各个列的类型(int32 * N) + 各个列的名称([长度+内容] * N)
2.1.2、长度说明:这里的“总长度”是 包含 结果集头 和 结果集内容 的总的长度
2.2、结果集内容
2.2.1、从ResultSet的第1个Row开始,一直到最后1个Row,从第1个Column到最后1个Column 的顺序 安放数据。
即 内存中安放的格式为:(ResultSet中 共有 M行N列结果)
第1行第1列,第1行第2列,... ...,第1行第N列
第2行第1列,第2行第2列,... ...,第2行第N列
... ...
第M行第1列,第M行第2列,... ...,第M行第N列
2.2.2、第?行第?列 的结果 的格式:
长度+内容
2.2.2.1、长度说明:这里的“长度” 仅仅是指 后面跟着的“内容”的长度,不包括自身的4字节
3、C/S之间,管理数据包的 数据格式 (这是 我写的 用于获取/管理 C/S 信息的功能,并非 C/S之间的业务逻辑数据)
3.1、获取所有连在S上的C的地址信息(SocketAddress) (这个是JAVA程序中得到的信息,只是简单的信息 没有MAC等 就算有 也是 映射过的MAC/IP/Port)
3.1.1、C-->S: 发送TCP包头信息(OP_TYPE_MANAGE_CLIENTS)
3.1.2、S-->C: TCP包头 + S返回信息时的时间[int64] + 所有客户端地址信息(单个客户端的地址信息 在内存中 连续存放)
单个客户端的地址信息(3个部分):(1)、该TremoteClient 最后一次使用的时间[int64] (2)、该客户端地址信息的长度[int32] (3)、该客户端地址信息
长度说明:这里的“客户端地址信息的长度”仅仅是“客户端地址信息”的长度,不包括自身的4字节
3.2、向S请求某C的信息:(这是让 ClientB返回它自己机子上的MAC/IP/Port等 信息)
3.2.1、向S请求某C的 地址信息(MAC/IP 等)
ClientA选择 某一个S返回的 ClientB地址信息(SocketAddressB) 发送到S,S 通过SocketAddressB找到ClientB,然后 向ClientB 请求它的详细地址信息
ZC: 下面 将 TCP包头省略了 (OP_TYPE_MANAGE_SOCKET_REQ)
(1)、ClientA-->S: SocketAddressB的长度 + SocketAddressB信息
(2)、S-->ClientB: SocketAddressB的长度 + SocketAddressB信息 + SocketAddressA的长度 + SocketAddressA信息
ZC: 这里S在ClientA发来的数据后面加了一段,这是用于 ClientB返回信息的时候 能够找到ClientA
(3)、ClientB-->S: 地址信息 + S发来的信息
(3.1)、地址信息 : 地址信息的长度[int32] + 地址信息的内容
长度说明:“地址信息的长度” 是 4字节 + 地址信息内容的长度
(3.1.1)、地址信息的内容:IP地址的长度+IP地址 + MAC的长度+MAC
长度说明:“IP地址的长度”、“MAC的长度”都是 4字节+后面内容的长度
(4)、S-->ClientA: 通过 SocketAddressA 找到 ClientA,将ClientB发来的数据 去掉SocketAddressA的部分之后 发给 ClientA
3.2.2、向S请求某C的 内存信息(分配的各种内存的信息[大小/用途 等])
ZC: 基本流程和 上面一样,下面只讲 不同的部分
(3)、ClientB-->S: 内存信息 + S发来的信息
(3.2)、内存信息 : 内存信息的长度 + 当前时间(GetTickCount) + 内存信息的内容
长度说明:“内存信息的长度”是 4字节+后面内容的长度
(3.2.1)、内存信息的内容:各个内存块的信息 在内存中连续存放
单个内存块的信息:5个integer 共20字节,分别为:
(A)、内存块总长
(B)、有效数据的开始偏移
(C)、有效数据的长度
(D)、内存块类型[是干嘛用的:接收TCP数据包/业务逻辑SQL数据/推送数据 等,对应各OP_TYPE_???]
(E)、最后一次申请该内存块时的时间(GetTickCount)
3.3、向S提交SQL语句,并返回执行结果
4、
5、
TCP_DB_中间件_数据打包格式的更多相关文章
- TCP_DB_中间件_遗留问题
1.一些经验 1.1.Delphi客户端中 Block的socket,使用 读取超时的话,会有大约1秒的时间等待...很影响使用体验...于是 放弃超时读取的方式,改为 在每次读取到TCP数据包时 都 ...
- H264的RTP负载打包的数据包格式,分组,分片
H264的RTP负载打包的数据包格式,分组,分片 1. RTP数据包格式 RTP报文头格式(见RFC3550 Page12): 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 ...
- Django-choices字段值对应关系(性别)-MTV与MVC科普-Ajax发json格式与文件格式数据-contentType格式-Ajax搭配sweetalert实现删除确认弹窗-自定义分页器-批量插入-07
目录 models 字段补充 choices 参数/字段(用的很多) MTV与MVC模型 科普 Ajax 发送 GET.POST 请求的几种常见方式 用 Ajax 做一个小案例 准备工作 动手用 Aj ...
- Java学习-013-文本文件读取实例源代码(两种数据返回格式)
此文源码主要为应用 Java 读取文本文件内容实例的源代码.若有不足之处,敬请大神指正,不胜感激! 1.读取的文本文件内容以一维数组[LinkedList<String>]的形式返回,源代 ...
- 基于RTP的H264视频数据打包解包类
from:http://blog.csdn.net/dengzikun/article/details/5807694 最近考虑使用RTP替换原有的高清视频传输协议,遂上网查找有关H264视频RTP打 ...
- C#_ 项目打包附加数据库
C#_ 项目打包附加数据库 2010-07-11 23:22:45| 分类: Winfrom|举报|字号 订阅 实现效果:安装项目时直接附加数据库. 1.首先在需要部 署的项目的解决方案资源 ...
- 安卓开发_数据存储技术_sqlite
一.SQLite SQLite第一个Alpha版本诞生于2000年5月,它是一款轻量级数据库,它的设计目标是嵌入式的,占用资源非常的低,只需要几百K的内存就够了.SQLite已经被多种软件和产品使用 ...
- Python——数据交换格式简要
简单数据交换格式 CSV: 一般用 open() 函数和字符串拆分 split() 方法,但python有内置的csv模块 读: import csv with open(r"C:\ ...
- 2016/4/2 json:js和jquery中轻量级数据交换格式 例: 窗口弹出 popwindow
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族 ...
随机推荐
- Python并行编程(二):基于线程的并行
1.介绍 软件应用中使用最广泛的并行编程范例是多线程.通常一个应用有一个进程,分成多个独立的线程,并行运行.互相配合,执行不同类型的任务. 线程是独立的处理流程,可以和系统的其他线程并行或并发地执行. ...
- SharePoint 2013 附加内容数据库后出现404错误
本文讲述怎样解决SharePoint 2013 加内容数据库(Content DataBase)后出现404错误. 笔者依照http://technet.microsoft.com/en-us/lib ...
- 使用Django和Python创建Json response
版权声明:本文为博主原创文章,欢迎转载. https://blog.csdn.net/fengyu09/article/details/30785101 使用jquery的.post提交,并期望得到多 ...
- SVM支持向量机总结
一.拉格朗日乘子法 一般,在有等式约束时使用拉格朗日乘子法,在有不等约束时使用KKT条件.这里我们先介绍拉格朗日乘子法,后面再介绍KKT条件. 比如考虑下面的组合优化的问题, 这是一个带等式约束的优化 ...
- 4.ubuntu实现linux与windows的互相复制与粘贴
为了能够在linux和windows之间直接进行互相复制粘贴,给出下面的解决办法. 系统环境: ubuntu12.04(linux), win7系统 以下指令都是在超级用户的执行权限下执行的. 要解决 ...
- WebHDFS vs HttpFS GateWay
基于hadoop 2.7.1版本 一.简介 1. WebHDFS官方简介: Introduction The HTTP REST API supports the complete FileSyste ...
- Wilcoxon符号秩+秩和检验学习[转载]
参数检验就是已知数据的精确分布模型,根据数据来求出模型中的未知参数:而非参数检验就是无需对样本总体分布(比如满足正态分布)做出假设. 1.符号检验 转自:https://baike.baidu.com ...
- C++实现不能继承的类
实现一个不能继承的类,这在Java等语言中是很好实现的,被final关键字修饰的类不能被继承. C++中没有类似的关键字,须自己实现.一般有如下两种方法: 1.设置构造方法与析构方法为私有 class ...
- 264. Ugly Number II(丑数 剑指offer 34)
Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime factors ...
- 三张图看遍Linux性能监控、测试、优化工具
Linux 平台上的性能工具有很多,眼花缭乱,长期的摸索和经验发现最好用的还是那些久经考验的.简单的小工具.系统性能专家 Brendan D. Gregg在最近的 LinuxCon NA 2014 大 ...