The client sequences each message and checks that replies come back
exactly in order: that no requests or replies are lost, and no replies
come back more than once, or out of order. Run the test a few times
until you’re convinced that this mechanism actually works. You don’t
need sequence numbers in a production application; they just help us
trust our design.
关于裸TCP可能失败的有趣讨论,这里是a good discussion。阅读评论。我毫不怀疑蒂姆是个很有学问的人,他只是犯了一个错误,没有意识到懒惰的海盗模式尤其是只有使用REQ-REP,因此比他的评论所暗示的更可靠。在
首先,代码中的
sequence
变量基本上是一个消息标识符。单次请求尝试失败有两种方式:在第二种情况下,如果您没有
sequence
号码,您就不知道哪个请求实际上是成功的。在考虑以下客户历史记录:
哪个请求触发了响应?它可以是三个请求中的任何一个,因为上面提到的第二种请求失败。通过响应中的
sequence
编号,我们可以确切地知道服务器处理的是哪个请求。在示例客户机中“来自服务器的错误回复”背后的想法是,如果客户机在请求#3(在请求#1和#2时超时),它会丢弃响应#n(其中n<;3),直到到达响应3,它接受。在
若要发送多于序列号的,请使用序列化格式并发送整个对象。在
例如,我可以定义
class MyRequest { int sequence; string text; }
,然后将其作为JSON发送到服务器。在无限递增的
sequence
变量可以替换为int64,然后就可以了,或者您可以做一些事情,比如使用GUID作为标识的请求。在不幸的是,蒂莫西希尔兹的回答是100%不正确的。你可以在这个free for download version of his book代码连接卷1中阅读Hintjen的评论。重要的一点来自141页,如下。。。在
关于裸TCP可能失败的有趣讨论,这里是a good discussion。阅读评论。我毫不怀疑蒂姆是个很有学问的人,他只是犯了一个错误,没有意识到懒惰的海盗模式尤其是只有使用REQ-REP,因此比他的评论所暗示的更可靠。在
相关问题 更多 >
编程相关推荐