一台PC上的ZeroMQ服务器和客户端

乔帕·博加

我将这种模式用于ZeroMQ上的服务器:

import time
import zmq

context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:5555")

while True:
    message = socket.recv()
    print("Received request: %s" % message)
    time.sleep(1)
    socket.send(b"World")

以及客户的这种模式:

import zmq

context = zmq.Context()
print("Connecting to hello world server…")
socket = context.socket(zmq.REQ)
socket.connect("tcp://localhost:5555")

#  Do 10 requests, waiting each time for a response
for request in range(10):
    print("Sending request %s …" % request)
    socket.send(b"Hello")

    #  Get the reply.
    message = socket.recv()
    print("Received reply %s [ %s ]" % (request, message))

如何在一台PC上同时使用服务器-客户端通信和客户端-服务器通信?

我们是否需要创建线程来实现这一目标?

该计算机必须能够发送数据,并同时从其他计算机接收和处理它们。

PS:可以解决我的问题吗?

用户名

可以并行运行该客户端多次

好吧,实际上不能
该声明虽然被认为是出于很好的意愿来解释某些事物,但实际上并可能会严重损害人们的计算机科学一般观点,因为它极具误导性。

本地主机O / S可以同时运行多次基于ZeroMQ的客户端代码[True]
可以同时多次运行基于ZeroMQ的客户端代码[True]
[任何生态系统]可以同时运行基于ZeroMQ的客户端代码并行时间[False]

没有人能够而且永远不会。Cray出色的并行处理语言都无法实现这一目标,因为ZeroMQ本质上是一个异步的,“公正的”[CONCURRENT]流程调度生态系统,其中每个主机在每个Context()实例内部运行,并在内部实例池中运行。 1+ IO线程(如果纯粹主义者认为是特殊情况,那么实际上为0+:o)),是设计上异步的,并且独立于外部事件流,因此,在这里永远不会出现真正的[PARALLEL]进程调度。

首先,您可以对[ ZeroMQ层次结构在不到五秒钟的时间]部分中介绍的主要概念元素进行简短的介绍性阅读,因为这将有助于我们从更深的角度讲相同的语言,了解ZeroMQ的可能性基于域。

如何在一台PC上同时使用服务器-客户端通信和客户端-服务器通信?

容易:
一台PC可以首先运行server.py-side代码运行python解释器下一步可以启动第二个python解释器(在另一个linux终端,Windows窗口或cmd-shell中)并运行-sideclient.py代码。这将起到魅力。

如果对细节REQ/REP感兴趣,请注意,可伸缩的正式通信原型模式对于任何生产级专业代码而言都是危险的,因为它可以(并且将)轻松地将转变为原则上无法避免,无法挽救的相互僵局。 (简单地说,散布的FSA:FSA对可能陷入死锁状态,任何一方都无法从中解救并继续进行相互合作的流程)

我们是否需要创建线程来实现这一目标?

好吧,实际上有许多线程已经在“内部”运行,如果没有其他线程,则每个python + ZeroMQContext()组合内部已经有一些线程

如果您打算指示python代码开始使用更多线程,那么在可以帮助解决此类决策难题之前,应该有更多关于这种意图的详细信息。使用线程还有一个主要的缺点-已知的python GIL锁定实际上将任何这样的尝试变成纯净的[SERIAL],是的,逐步的顺序执行的代码执行(因为这有助于将GIL保护器的作用保持在数据垄断访问(-[SERIAL]引起的代码执行永远不会进入非原子写入的冲突情况,竞争条件越少,因为GIL步进实际上使每个操作都是原子步-当然,花费大量费用,[SERIAL] GIL逐步遍历所有线程池执行的代码执行图。安全吗?是的,但是比必要的要慢。


最好的下一步?

如果确实很认真并且热衷于研究[分布式系统]设计,那么最好的下一步就是阅读一本神话般的Pieter HINTJENS的书[ Code Connected,第1卷](pdf在线),所有的时间和精力都可以从获得精心设计的实用意见和大量经验,因此需要尽可能地从ZeroMQ中汲取资源,并将其提供给用户进一步的智能设计。

请继续关注,这是朝正确方向迈出的一步。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python:套接字-从同一台PC运行服务器和客户端

在一台机器上模拟的服务器和客户端网络应用

尝试将文件客户端传输到同一台PC上的服务器时遇到异常

每个客户端(在一台服务器上)的登录页面不同

多个客户端和一台服务器 Blazor 资产冲突

UDP中的一台服务器和多客户端聊天框

ZeroMQ - 模拟多个客户端到一台服务器的标准套接字

ASIO客户端服务器在同一台PC上连接正常,但在本地网络上失败

在Windows Phone 8.1上对多个客户端一台服务器进行套接字编程

当服务器和客户端在同一台计算机上时收听广播

我们可以在同一台机器上彼此找出服务器/守护进程和客户端进程吗?

无法让2个客户端监听一台UDP服务器

一台计算机中的服务器-客户端

将多个客户端连接到一台服务器

MongoDB架构一台服务器多个客户端C#

一台服务器多客户端C / C ++

如何为每个客户端获取一台DCOM服务器

一台客户端断开连接后服务器关闭(JAVA)

在同一台服务器上使用带有 64 位 oracle 客户端的 php 7.3.4 64 位和带有 32 位 oracle 客户端的 php 7.3.4 32 位

如何使服务器将客户端重定向到另一台服务器?

如何使用nodejs将客户端/用户从一台服务器反向代理到另一台服务器?

客户端向tcp服务器发送数据,tcp服务器向另一台服务器发送数据

是否可以在同一台计算机上运行套接字服务器和套接字客户端?

具有一台服务器和21个客户端的小型网络中的最佳IP配置

如何在同一台计算机上同时运行Synergy客户端和Synergy服务器?

如何使用内存映射文件在同一台计算机上的服务器和客户端之间进行通信?

Zookeeper 客户端会话将超时或传输到另一台服务器?

通过套接字将多个客户端编程到一台服务器

客户端只能在同一台计算机上连接到服务器