异步客户服务端框架(1)

异步客户服务端框架(一)

 

我遇到的问题

  在做上位机软件的时候,需要将上位软件的命令传输到每个被控席位,也需要和被控计算机进行数据交换,我们的被控端是服务器,也可能是客户端,甚至有时候会遇到客户端先启动服务端后启动情况,要控制的机器也可能是多台,同时我们要支持TCP和UDP两种协议。

  异步客户服务端框架(1)

好酒加冰块-交互过程

  如果采用Tcp作为连接的时候会产生如下的过程:

  异步客户服务端框架(1)

   session代表数据交互过程,我们将这个过程抽象为会话对象(Udp也有类似的会话对象,只不过没有Tcp的连接过程)。该对象直接管理着服务与客户端的数据读取与写入过程,当有网络数据到本地的时候,io中断会调用session中的读取成员函数(in_event)读取数据,当网络Io可以写入数据时io中断也会调用session的写成员函数(out_event)将数据传入网络栈中。在连接的过程中客户端需要指定远端服务器的IP与端口,而服务端则需要指定本地绑定监听的IP与端口号。

  UDP的交互过程:

  异步客户服务端框架(1)

 

 Udp节点之间没有握手的过程,都会指定本地绑定的ip地址和端口号,Udp在数据传输时需要指定对端的Ip与端口号,这样两个节点之间就可以相互输入与获取数据,session也同tcp的session功能一致,只是数据读取与写入时系统Api不一致而已。