Socket-connection:一端如何知道另一端收到了消息?



我有一个简单的套接字客户机-服务器应用程序。如果客户端通过套接字连接向服务器发出请求,当确认丢失时,它如何知道服务器收到了消息?我正在努力解决以下问题:

服务器接收客户端请求并开始处理消息。服务器向客户端发送一个可能永远不会到达客户端的确认。客户端认为服务器没有接收到消息。在这种情况下,我想防止客户端再次向服务器发送请求,因为服务器可能已经触发了每个请求只允许触发一次的进程。

如果来自服务器的响应(或ack)丢失,则客户端将不知道服务器是否接收并处理了请求。在某些情况下,请求被处理两次不是问题,在其他情况下则是问题。

解决这个问题的常见方法不是在客户端检查请求是否被服务器成功接收,而是在服务器上检测重复请求并忽略它们。为此,请求需要有一些足够唯一的标识符,如简单的请求计数器、事务id或类似的标识符。或者服务器可能将请求本身视为唯一id,即检测是否发送了两次完全相同的内容。

最好的实现依赖于实际的用例。但是,像TCP或RTP这样的协议有一些递增的序列号,因此服务器只需要记住最后一个进程号就可以检测到重复的进程。

相关内容

最新更新