ZMQ脚本 - 只发送一条消息并等待完整回复

时间:2016-01-29 11:07:11

标签: python sockets zeromq

我遇到python脚本问题,用于通过 rcon 控制游戏服务器( Quakelive )(你可以发送命令和它们在服务器上执行 - 比如更改地图或密码。)

游戏开发者提供了这样的脚本。它是使用 ZeroMQ 库编写的,但问题是它需要来自标准输入的命令(首先它们进入队列然后被发送到服务器)并且当 stdin ,它只是等待它们。

我想要做的只是发送/执行一个命令,完成连接并且进一步了解,但是我对python和ZeroMQ都很陌生,所以我和#39;有点失落。

这是脚本:https://github.com/marconett/quakelive-docker/blob/master/zmq_rcon.py

另外,我从测试中推断出,服务器需要发送完整的回复(有时是2行,有时是10行)否则会被暂停。

1 个答案:

答案 0 :(得分:0)

是。
ZeroMQ正式模式中需要回复REQ/REP

首先,让我们揭开问题的神秘面纱。

ZeroMQ是一段可爱的代码。 S caleable F ormal C 通信 P 实习生名称在某种程度上类似于正在发生的事情,如果各自的交易对手努力使用这种正式行为。

从第114行开始,正在使用 REP/REP ,其中 REQ 要求 REP 必须回答(并且REQ - 方必须接收/“读取”它,之后 REQ 可以向REP发送另一条请求消息侧的:

    ...
    server_rep = server_ctx.socket( zmq.REP )        # ____________.REP archetype
    server_rep.bind( HOST )                          #                ^ |
    ...                                              #                | v
    client_socket_1 = client_ctx_1.socket( zmq.REQ ) # ____________.REQ archetype
    client_socket_1.connect( HOST )
    ...
    client_socket_2 = client_ctx_2.socket( zmq.REQ ) # ____________.REQ archetype
    client_socket_2.connect( HOST )

因此,无论将要发送到 REP 的初始源数据来自stdin来自fileIO .readline()或其他ZeroMQ模式套接字端点,每个 REQ -message都必须通过 REP重新解锁 -message(在RPC- 远程旁边,比你的代码努力只发送一个命令服务器并退出)。

因此,服务器端代码负责设计良好的代码,而不是您的代码。