4.5 去除重复消息
在EXCHANGE_LIFETIME时间之内,当ACK消息丢失或者在第一个超时时间之前没能到达原始服务端,接收端可能收到多次重复的CON消息(由Message ID和源端地址标识)。接收端应该对每一次收到的重复消息都回以相同的ACK或RST,但应该只处理一次。当CON消息传输的请求是幂等的时候见第5.1节),或者可以以幂等的方式来处理时,这一规则可以放宽。消息去除重复规则被放宽的例子如下:
服务端对于幂等的请求的每一次重传都回以相同的响应(第4.2节),这样一来它就无需维护Message ID的状态,在此情况下可以放宽规则。例如,如果重复处理的过程的开销小于保留上一个响应的开销,实现中可能把GET,PUT,或DELETE请求的重传当作独立的请求来处理。
对于一些非幂等的请求,只要在应用层语义上这个取舍是值得的,一些资源受限的服务器也可能会放宽规则。例如,如果一个POST请求对服务端的数据状态的影响是很短暂的,那么可能重复处理请求的开销会小于保留上一次传输的相同请求处理状态的开销。
接收端可能在NON_LIFETIME(第4.8.2节)时间内收到重复的NON消息(由Message ID和源端地址标识)。接收端应该忽略掉重复的NON消息,只处理一次。这一规则根据应用程序的语义,有可能被放宽。
最后更新于
这有帮助吗?