美文网首页
net搭建多路复用的RPC通道

net搭建多路复用的RPC通道

作者: VivaLaVida_692c | 来源:发表于2020-01-31 13:24 被阅读0次

1.先来进行一个简单的单工通信通道:

client.js server.js log

可以看到,client 和 server 已经打通通信,实现一个简单的单工通信通道。

下面要实现一个半双工通信通道,我们需要的是客户端和服务端有来有往的进行交流。

client(半双工) log(半双工) server(半双工)

如上,在客户端随机发送id(id转化为buffer传输)到服务端,服务端根据id获取课程列表里的内容返回到客户端,这边是一个简单的半双工通信通道。

通过在client端的socket监听服务端传过来的数据,每当监听到,就继续向服务端传入id获取课程内容,实现客户端和服务端的连续交互,如下:

client log

        以上就是半双工通信。那么半双工通信和全双工通信到底有什么不一样呢?比如半双工如果并发请求的话,服务端相应返回的数据到了客户端你并不清楚其对应的位置,就会导致混乱,所以半双工在同一时间只能进行单向通信。而全双工通信相对而言就更为自由了,因为其在并发请求的时候每个请求都会有一个独一无二的序列号,服务端返回数据到客户端都能通过序列号一一对应,从而保障数据准确性。

        全双工通信通道的搭建:

                A.关键在于应用层协议需要有标记包号的字段

                B.处理以下字段,需要有标记包长的字段

                        粘包

                        不完整包

                C.错误处理

下面将前面半双工通道改造为全双工通道,如下:

client(全双工)

客户端设立一个50ms的定时器,服务端设立一个随机一秒内的定时器,实现客户端和服务端全双工无序通信。

server(全双工)

可以看到客户端会声明一个自增的序列号seq,在发包的时候会先插入seq进行标记,服务端拿到buffer后,会截取序列号seq,并插入到返回给客户端的包中,这样一来,客户端和服务端就可以实现无序的自由通信!

相关文章

  • net搭建多路复用的RPC通道

    1.先来进行一个简单的单工通信通道: 可以看到,client 和 server 已经打通通信,实现一个简单的单工通...

  • net/rpc

    rpc包提供了通过网络或其他I/O连接对一个对象的导出方法的访问 应用 比如我们在服务器注册一个对象,这个对象可以...

  • net/rpc

    rpc包提供了通过网络或者其他io连接,对一个对象导出方法的访问。服务器端注册一个对象,当做一个拥有类型名称的服务...

  • 微服务

    微服务简介 RPC 官方net/rpc包 多参数 new struct client: rpc和protobuf结...

  • Go RPC

    Go RPC Go 原生的网络RPC需要关联Go的net框架和库内容(net,tpc,http等等) 理论 总体来...

  • 一个入门rpc框架的分析学习

    参考 huangyong-rpc[http://git.oschina.net/huangyong/rpc] 轻量...

  • Go net/rpc

    Golang官方提供的net/rpc库使用encoding/gob进行编解码,支持TCP或HTTP数据传输方式,由...

  • 搭建、挂载nfs及卸载

    搭建 1、 安装 nfs 和 rpc 2、运行 rpc 和 nfs (先启动RPC服务,然后再启动NFS服务) ...

  • JAVANIO -选择器02 Selector原理和使用

    Selector 概述 Selector 一般称为选择器,用来作为SelectableChannel通道的多路复用...

  • Hadoop9 RPC介绍

    RPC 转载:http://blog.csdn.net/mindfloating/article/details/...

网友评论

      本文标题:net搭建多路复用的RPC通道

      本文链接:https://www.haomeiwen.com/subject/jzitxhtx.html