银行长连接机制及远程调用机制
1.走io阻塞的socket。主要是客户端与服务端建立长连接之后,传输的格式及标准,我是按照socket读取,先用8位存储消息的大小,表示消息头。后面存储消息体,这样就解决了沾包的一些问题。但是在正式环境,还会出现分包的问题,解决办法是用递归的方式读取剩下的消息体。
2走nio的无阻塞的事件驱动。结合neety的封装。实现SimpleChannelInboundHandler。在自己的Handler里处理读取事件。
实现的几点注意:
一旦长练终止,由客户端销毁连接,发起重连机制。服务端只是关闭连接。
这种机制主要合适双方发送消息,在这种机制上可以延伸成远程调用机制。实现服务端通过命令来让客户端执行某一方法。主要实现的改变点是:
数据格式:
JSON字符串格式传输
{
"merchantNo":"XXXXX",
"data":{},
"seq":"XXXXX",
"refSeq":"XXXXX",
"funcName":"XXXXX"
}
注意:
发送方每次发送的消息seq为随机生成的32位uuid,每次发送需要携带唯一标识seq
发送方如果是返回给服务端消息时,把上次服务端发送的seq赋值给此次发送refSeq
funcName的定义:
外卖消息 doTakeaway
心跳消息 doHeartbeat
关键消息 doCoreInfo
外卖回写 doReTakeaway
日志上传 doUploadLog
日志回写 doReUploadLog