python – 具有实际请求数据的Lazy Pirate模式

我正在使用PyZMQ绑定学习zmq,我在使用Lazy Pirate模式时遇到了麻烦.
所以,这是Lazy Pirate serverLazy Pirate client的代码.

在示例客户端发送请求,但它是简单的数字.如何使用文本数据发出真实请求并保持模式实现?

此外,我不会完全理解客户端代码中的序列变量 – 它无限递增=>当序列达到int变量最大值时,python不会崩溃吗?

解决方法:

首先,代码中的序列变量基本上是消息标识符.单个请求尝试可能有两种失败方式:

>请求消息可以简单地永远不会发送
>请求消息发送,但客户端厌倦了等待并在响应返回之前超时

在第二种情况下,如果您没有序列号,则不知道您的哪个请求实际上是成功的请求.

考虑此客户历史:

>发送请求#1
>超时
>发送请求#2
>超时
>发送请求#3
>收到回复

哪个请求触发了响应?它可能是三个请求中的任何一个,因为上面提到的第二种请求失败.通过响应中的序列号,我们可以确切地知道哪个请求是服务器处理的请求.

示例客户端中“来自服务器的格式错误的回复”背后的想法是,如果客户端处于请求#3(已经超时请求#1和#2),则它会丢弃响应#n(其中n <3) )直到它接受响应#3,它接受. 要发送超过序列号,请使用序列化格式并发送整个对象. 例如,我可以定义类MyRequest {int sequence;字符串文字;然后将其作为JSON发送到服务器. 无限递增的序列变量可以用int64替换然后就可以了,或者你可以做一些像使用GUID作为标识的请求.

上一篇:javascript-如何在nodejs中为zeromq设置套接字选项


下一篇:BZOJ 2502: 清理雪道 [最小流]