联通SGIP最后的版本是1.2。SP和SMG之间没有心跳包定义。
SP提交给SMG只能是Submit或Trace。
没有心跳,就无法实现长连接。连接不断断开->连接->断开->连接。
对MQ消费类消息发送,控制难度大。很可能刚断开,就有MQ消息待消费,导致消息发送失败,需要重试,导致消息发送产生延迟。
一、困境:
(1)SP提交给SMG只能是Submit或Trace。


(2)Trace估计在Bind LoginType==11才起作用。在LoginType=1或LoginType=2没有Trace

(3)Trace_Resp延迟较大。

SGIP协议的定义明显存着不足,如何解决?
二、解决方法:
可以考虑采用心跳机制,发送BindRequest,或BindResp,或TraceRequest,但需要验证是否可行

(1)TraceRequest:测试到还是会断开。走不通
(2)BindRequest:测试到可以,基本解决了问题。副作用:由于没有收到BindResponse,导致重发
SgipBindRequestMessage msg = new SgipBindRequestMessage();
msg.setLoginType((short)1);
ctx.channel().writeAndFlush(msg);
(3)BindResponse:测试到某些机器可行!!!
private AtomicLong counter = new AtomicLong(0);
SgipBindResponseMessage msg = new SgipBindResponseMessage();
msg.setSequenceNo((int) counter.incrementAndGet());
ctx.channel().writeAndFlush(msg);
正式环境测试:
(1)SGIP客户端发:部分机器送BindResponse能解决问题,部分不行。
解决方法:客户端发送BindRequest均能解决问题。
(2)SGIP服务端,部分机器发送BindRequest或BindResponse导致联通无法正常推送状态报告。
原因:某些环境,链接数到达业务限制60.导致上级无法建立新链接。这些环境,上级是发送状态就建立链接。
解决方法:不发送模拟心跳。
三、结论
SGIP客户端: 发送BindRequest,多个环境测试通过,
SGIP服务端:不发送模拟心跳。
2025-11-14通过。
SGIP1.2心跳缺失解决方案
3203

被折叠的 条评论
为什么被折叠?



