当前位置: 首页 > web >正文

序列化,应用层自定义协议

我们发的是一个结构化的数据

OS内部,协议全部都是传递结构体对象。可以直接发送二进制对象吗?因为CS双方都能认识这个结构体!!!

可以直接发送二进制对象,但是不建议

1. 客户端和服务器说属于不同的OS,不同的结构体,在不同的对齐方案下,我们的结构体大小可能不一样。存在内存对其问题,可能导致无法正确解析

2. 客户端和服务器的语言可能不同

从今天开始,我们要进行网络协议的通信,在应用层,强烈建议使用序列化和反序列化方案,至于直接传递结构体的方案,除非特殊场景,否则不建议

write本质是拷贝,

1. write,read就是收发消息 -- write,和read是不是把数据发送到了网络中? 不是,本质上把数据由用户拷贝到Os内核里,os决定什么时候发,OS把数据发送到网络中,本质也是拷贝

2. 主机间通信的本质:把发送方的发送缓冲区内部的数据,拷贝到对端的接受缓冲区

3. TCP通道是全双工的?因为有两对发送和接受缓冲区,接受和发送是分离的

读数据其实是检测接受缓冲区里有没有数据,没有数据read就会阻塞,read也是拷贝,从内核拷贝到用户

文件描述符对应的tcp发送缓冲区,tcp自主决定什么时候发,发多少,出错了呢?传输控制协议

四组生产者消费模型(内核和用户之间),阻塞?因为和系统做同步

计算机世界:通信即拷贝

tcp:面向字节流,什么时候发?发多少?出错?

在tcp中,要读到完整的报文,由接收方应用层自己决定的

我们未来定制的协议:

1.结构化字段,提供好序列化和反序列化方案

2.解决因为字节流问题导致读取不完整的问题(只处理读取)

Jsoncpp是一个用于处理TSON数据的C++库,他提供了将JSON数据序列化为字符串以及从字符串反序列化为C++数据的功能,Jsoncpp是开源的,广泛用于各种需要处理JSON数据的C++项目

因为tcp是面向字节流的。当读取方在读取的时候,可能读到一个完整的json请求,也可能会读到半个、一个、五个、五个半请求json串。都会有可能存在

read本身并不能保证读到的报文的完整性,只能保证如果有数据就读上来。谁来保证报文的完整性?应用层程序员自己保证。就需要进一步定制协议。

当我们tcp中读取数据的时候,读到的报文不完整,或者多读导致下一个报文不完整,这个问题就叫做“粘报”问题

http://www.xdnf.cn/news/19121.html

相关文章:

  • C#和Lua相互访问
  • 数据结构:冒泡排序 (Bubble Sort)
  • 配送算法17 AFramework for Multi-stage Bonus Allocation in meal delivery Platform
  • 嵌入式研发工程师成长路线图,基础入门 → 中级提升 → 高级进阶 → 专家方向
  • 【笔记ing】大模型算法架构
  • Ollama 是否适合生产环境部署支持业务总结
  • [ICCV25]TRACE:用3D高斯直接学习物理参数,让AI“推演”未来场景
  • UML状态图中entry/do/exit动作的深入解析与C/C++实现
  • C++学习笔记之异常处理
  • 驱动开发系列67 - NVIDIA 开源GPU驱动open-gpu-kernel-modules分析-驱动初始化
  • Redis实战-点赞的解决方案
  • CodeSouler v2.4.0 版本更新
  • 20250828_学习JumpServer开源堡垒机使用:统一访问入口 + 安全管控 + 操作审计
  • 8.28日QT
  • Linux并发与竞争
  • 专项智能练习(图形图像基础)
  • 97、23种设计模式之桥接模式(6/23)
  • Flink Redis广播方案
  • LVDS系列26:Xilinx 7系 OSERDESE2原语(二)
  • Cubemx+Vscode安装与环境配置
  • Shell 脚本编程规范与变量
  • Spring Boot + KingbaseES 连接池实战
  • 【C#/Cpp】CLR项目搭建的内联和托管两选项
  • 基于uni-app的iOS应用上架,从打包到分发的全流程
  • 大模型推荐系统新标杆!EGA-V2端到端大模型驱动推荐系统
  • Ansys Electronics Desktop 2025 R2 软件界面介绍
  • Java线程池深度解析:从原理到实战的完整指南
  • orbslam2语义分割
  • 工业级TF卡NAND+北京君正+Rk瑞芯微的应用
  • 人工智能-python-深度学习-过拟合与欠拟合:概念、判断与解决方法