说明
同步消息指的是,A给B发送一条消息后,在原线程中等待B给出一条对应的响应消息,用其它网络框架实现这样的功能,需要开发人员自己精通多线程间的通讯,极易发生死锁、死等等现象。t-io已经内置了发送同步消息的能力,开发人员可以像调用方法那样使用
准备工作
- 设计协议时预留synReqNo (Integer) 和 synRespNo (Integer) 字段(Packet.java中已经内置了这俩字段)
- 编码时,写入synReqNo和synRespNo
@Override
public ByteBuffer encode(Packet packet, TioConfig tioConfig, ChannelContext channelContext) {
...
buffer.putInt(packet.getSynReqNo());
buffer.putInt(packet.getSynRespNo());
...
}
- 解码时,设置好synReqNo和synRespNo
@Override
public CluPacket decode(ByteBuffer buffer, int limit, int position, int readableLength, ChannelContext channelContext) throws TioDecodeException {
...
packet.setSynReqNo(synReqNo);
packet.setSynRespNo(synRespNo);
...
}
使用
- 一端发送同步消息
CluPacket cluPacket = new CluPacket();
CluPacket respPacket = Tio.synSend(channelContext, cluPacket, 5000L);
if (respPacket != null) {
log.info(respPacket);
}
- 对端响应同步消息
CluPacket respPacket = new CluPacket();
// 这一行代码是精髓
respPacket.setSynRespNo(reqPacket.getSynReqNo());
Tio.send(channelContext, respPacket);