在我的客户端,我通过ZeroMQ收到了很多输入,需要不断更新。我的服务器是用python编写的,但这不重要。这就是我在MainActivity中所做的:
上市 …
你有一个泄漏,因为你没有关闭/结束/释放一些东西。一世 认为 必须终止上下文: context.term() 关闭请求者后……
context.term()
好吧,在 分布式系统 设计,信令/消息设置成本的基础设施是不可忽视的。一些用例更有效,有些则更少。
永远是新的 的 Context() </强> 每个方法调用一个实例,然后通过清理调用立即将其抛出 的 .term() * </强>
Context()
.term()
- 方法肯定比拥有一个挂式应用程序或冷冻设备更好,但它远非公平的设计,尊重过程延迟和“生态”资源。
最好先建立一个半持久的资源基础设施(每个 Context() -instance通常是一个非常昂贵的玩具来实例化(截至2018年至第一季度的API 4.2+),对于 Socket()
Socket()
- 实例,但类似于 <code> Poller()</code> 它的所有内部AccessPoint(s)注册挂钩,但原则可能也扩展到'em)。
- 实例,但类似于
<code>
Poller()
</code>
它的所有内部AccessPoint(s)注册挂钩,但原则可能也扩展到'em)。
对代码的早期重新分解将有助于不使用昂贵的资源作为“可消耗的一次性”来扩展案例。
这部分:
while (true) { try { ZMQ.Context context = ZMQ.context(1); // Connect to server ZMQ.Socket requester = context.socket( ZMQ.REQ ); String address = "tcp://xxx.xx.xx.xx"; int port = 5000; requester.connect( address + ":" + port ); ... } ... }</code>
while (true) { try { ZMQ.Context context = ZMQ.context(1);
// Connect to server
ZMQ.Socket requester = context.socket( ZMQ.REQ );
String address = "tcp://xxx.xx.xx.xx";
int port = 5000;
requester.connect( address + ":" + port );
...
}
这是一种资源破坏性的反模式,总是存在重复的延迟,甚至是远程挂断和远程拒绝以及类似问题的风险。