基于NIO的消息路由的实现(三)服务端与客户端结构

1、服务器端结构:redis

如图所示:服务器

  • 指令类和报文类:对下行的指令和上行的报文进行了类的封装,分别实现IOrder和IPacket接口,继承Order,Packet基类;spa

  • 服务主线程:接受客户端链接,将客户端发送的报文投递到通信队列中,发送指令给客户端;保存链接对象(GVConnection)线程

  • 通信队列CQ:存储客户端发送过来的报文,此报文由通信主线程放入;对象

  • 通信队列消费者:对通信队列中的报文进行处理,该作什么作什么,若是是短消息,则放入消息队列MQ中单独处理;继承

  • 消息队列消费者:对MQ中的短消息进行处理;若是转发的目标客户端没有通道(channel),那么就存入redis。(此部分目前还没有实现)接口

  • 通道清理线程,针对超时的通道,已关闭的通道进行按期清理;此部分应该有更好地实现方式,请你们帮忙想一想吧。队列

2、客户端结构:
消息队列


  • 指令和报文类同上;io

  • 链路维护线程:每隔必定的时间发送给服务端K报文,用于链路检测,若是超过服务端的连续回应次数超过必定的限制(好比,连续三次没有回应),那么,视为已经掉线;

  • 短线重连线程:两种状况会引起重连:一、服务端主动切断通道;这来是可捕获的;二、异常中断(依靠链路维护);

相关文章
相关标签/搜索