- 主题:求个思路 多谢了
求个思路或逻辑
目前做一个udp协议的超时监控,比如发起A,响应是B、C、D、E
服务端接收到A后30秒内收到BCDE就OK,超过30秒则告警
服务端接收到的数据还没有顺序发送的是ab可能收到ba
也有可能是aaab这样的也要考虑进去
我目前做的思路是收到发起消息时放到redis中,
收到响应消息时删除key
程序监听 redis expired事件, 当收到事件消息时,说明肯定是超时了
因为收到的包是无序的,所以人为的把响应消息给sleep了,阻断了,这样强制他有序了
虽然这样免强还能用,但是有误报,比如可能因网络问题收到的是AAAB,连续发了几个请求,但在30秒内还是有响应,不应该告警
我现在这种情况就会告警
而且人为sleep这种方式我觉得很low
但又想不出其它的,还忘各位高手指点
--
FROM 221.219.191.*
sip协议
【 在 Knightmare 的大作中提到: 】
: 对每个A消息起个协程就行
: 每个携程里,当收到A对应的BCDE并处理以后就结束,否则到30秒也结束但是报错
: 至于aaab这种情况,我觉得你这个协议本身就有点乱,应该怎么处理你自己好好规划一下
: ...................
--
FROM 221.219.191.*
sip协议
a是invite
发两个invite 可能是因为网络原因重发
b是100trying 回了就OK
【 在 wincss 的大作中提到: 】
: 你自己的需求就不明确啊
: AAAB,这个B是对应哪个A的,是回一个B所有的A就都没超时?
--
FROM 221.219.191.*
我都不知道怎么描述了,看下sip协议就好了,怕直接写协议中的方法涉及不到的人会看不懂,就用abc了,协议是udp的所以接受到的是随机顺序
【 在 ilylx 的大作中提到: 】
:
: if (收到A){
: // 设置超时时间为30秒
: ctx, cancel : = context.WithTimeout(context.Background(), 30*time.Second)
: select {
: case <-ctx.Done():
:
: ..................
发自「今日水木 on iPhone 11」
--
FROM 221.219.191.*