白话网络通讯

  • 不同主机之间通讯本质-二进制流传输

无论你是纯socket通讯,还是应用层的http,Rpc协议进行通讯,本质底层都是传输二进制流

  • 不同主机如何认识二进制流为需要的内容-约定协议

既然是二进制,那么发送和接受方如何识别消息的边界,那就约定协议,比如http约定了http包的格式,Dubbo Rpc协议约定了dubbo包的格式

  • 不同主机之间如何通讯-socket通道

二进制流的传输本质是依赖socket通道,可以是udp,也可以是tcp

  • 发送方如何转换内容到二进制流-序列化

既然通讯本质是二进制流,那么发送方如何把业务POJO类转换为二进制流那?那就需要对POJO进行序列化,网卡会在你序列化后的二进制加上网络各层的协议头或者尾后,就通过网络进行传输了

  • 接收方如何转换二进制流到需要的内容-半包\粘包处理+反序列化

既然接收方接受到的是二进制流,那么如何转换为程序需要的POJO类那?首先网卡会把接受的二进制流中网络各层的协议头尾去掉,把业务二进制流传递给应用程序,然后你需要首先根据协议读取二进制流为一个完成的协议包,由于服务器一般有接受缓存,在完成这个过程中你可以需要解决粘包和半包问题,找到一个完整协议包的边界后,你需要把它根据协议里面约定的反序列规则反序列化二进制包为POJO类。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Core Net

ASP.NET Core 2.0 : 七.一张图看透启动背后的秘密

37250
来自专栏耕耘实录

几个Linux命令及脚本使用中的奇淫巧技

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

11320
来自专栏我爱编程

Day15进程和线程

多进程 multiprocessing multiprocessing模块提供了一个Process类来代表一个进程对象,下面的例子演示了启动一个子进程并等待其结...

29750
来自专栏Java成神之路

rabbitmq_学习_00_资源帖

7020
来自专栏Python绿色通道

Python的线程

Python的标准库提供了两个模块: thread 和threading,thread 是低级模块,threading是高级模块,对thread 进行了封装。绝...

18430
来自专栏大闲人柴毛毛

程序员必知的并发编程注意事项

获取单例对象需要保证线程安全,其中的方法也要保证线程安全。 单例对象会被多线程共享,因此要保证它是线程安全的,它其中的方法都要保证是线程安全的。 工具类、资源...

42850
来自专栏前端布道

MongoDB初识

什么是MongoDB MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 ...

39880
来自专栏Petrichor的专栏

AttributeError: 'module' object has no attribute 'fullmatch'.

经过查找,发现出错的原因是 re库 中的 fullmatch函数 是 在py3.4之后才新添加的 。

38430
来自专栏北京马哥教育

Linux自动化运维工具之ansible(二)

糖豆贴心提醒,本文阅读时间8分钟 YAML简介 YAML是一个可读性高的用来表达资料序列的格式。 YAML参考了其他多种语言,包括:XML、C语言、Pytho...

29060
来自专栏应兆康的专栏

Python Web - Flask笔记2

导入config.py后app.config.from_object(config)

40020

扫码关注云+社区

领取腾讯云代金券