最近有同事问我,我们项目里netty到底是怎么用的?他最近要面试,简历里面提到了netty,但是因为没有用过,也不知道该怎么回答面试官。于是蛋蛋给他做了一个关于netty技术的分享。
要知道,一般的纯软件项目通过http通信就已经足够了,一个spring吃遍天,基本用不到netty这个底层通信框架。
而我们是物联网项目,硬件端与软件端是通过tcp自定义协议进行通信的,所以我们需要选择一款tcp通信框架来做底层的通信。于是自然而然选择了这款鼎鼎大名的nio异步通信框架,它号称支持单节点百万连接。
这里介绍下我们的通信细节,服务端与硬件端的通信报文都是utf8编码的字符串,然后以%start%开始,以%end%结尾,中间是业务json串。
服务端接收到消息(字节数组),先进行字符串解码,然后进行字符串截取(去掉开始结束标志),然后解析json,并把不用类型的业务报文转发给不同的业务处理。
服务端发送消息(主动发送消息),需要对消息json字符串拼接开始结束标志,然后做字符串编码,转成字节数组后写到通道里发送出去。
这里面服务端接收消息比较好处理,难的是服务端主动发送消息,服务端主动发送消息需要保留客户端连接对象,然后根据不同的业务向不同的客户端发送。
我们的项目里是客户端会定时发送心跳消息,当接受到客户端的心跳消息,我们把客户端连接对象存储到一个map里面,key取客户端的业务唯一标识。
大概的使用就是这个情况,以供参考。