我遇到python脚本问题,用于通过 rcon
控制游戏服务器( Quakelive )(你可以发送命令和它们在服务器上执行 - 比如更改地图或密码。)
游戏开发者提供了这样的脚本。它是使用 ZeroMQ
库编写的,但问题是它需要来自标准输入的命令(首先它们进入队列然后被发送到服务器)并且当 stdin
,它只是等待它们。
我想要做的只是发送/执行一个命令,完成连接并且进一步了解,但是我对python和ZeroMQ
都很陌生,所以我和#39;有点失落。
这是脚本:https://github.com/marconett/quakelive-docker/blob/master/zmq_rcon.py。
另外,我从测试中推断出,服务器需要发送完整的回复(有时是2行,有时是10行)否则会被暂停。
答案 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- 远程旁边,比你的代码努力只发送一个命令服务器并退出)。
因此,服务器端代码负责设计良好的代码,而不是您的代码。