У меня странная проблема. Я разрабатываю веб-интерфейс для своего несогласного бота и использую ZeroMQ для связи между процессом бота и процессом fastAPI. Моя программа структурирована так, что процесс fastAPI отправляет ZeroMQ REQ
. Мой бот разногласий действует как " сервер ", поскольку он предоставляет информацию, а процесс fastAPI действует как клиент. Этот указанный c метод пытается заставить моего разногласного бота выбрать участников онлайн и затем отправить их обратно запрашивающей стороне. Вот мой код:
На стороне сервера: (несущественные части, переданные на сжатие)
import asyncio
import zmq
import zmq.asyncio
async def openWebServerInterface():
zmqctx = zmq.asyncio.Context()
s = zmqctx.socket(zmq.REP)
s.connect('tcp://127.0.0.1:1234')
print('waiting on request...')
request = await s.recv_string()
if request == "gimmethedata":
print("sending online people")
s.send_string(await returnOnline())
print("data request sent!")
s.close()
async def returnOnline():
message = "this will return my online members"
return message
asyncio.run(openWebServerInterface())
Сторона клиента:
async def listenForResponse():
await openBotConnection()
print("logo interface opened!")
r = zmqctx.socket(zmq.REP)
print("socket connected, waiting for response")
reply = await r.recv_string()
print(reply)
return reply
async def openBotConnection():
s = zmqctx.socket(zmq.REQ)
s.connect('tcp://127.0.0.1:1234')
await s.send_string("gimmethedata")
print("data request sent!")
s.close()
@app.get("/")
async def root():
print("listing for logo's response!")
return await listenForResponse()
Полученное сообщение об ошибке находится на серверной программе (нет проблем с запуском "клиентской" программы). Ошибка выглядит следующим образом:
Traceback (most recent call last):
File "E:/DiscordBotContainer/ServerSideTestFile", line 23, in <module>
asyncio.run(openWebServerInterface())
File "*\AppData\Local\Programs\Python\Python38\lib\asyncio\runners.py", line 43, in run
return loop.run_until_complete(main)
File "*\AppData\Local\Programs\Python\Python38\lib\asyncio\base_events.py", line 616, in run_until_complete
return future.result () File "E:/DiscordBotContainer/fuck it", line 9, in openWebServerInterface
s = zmqctx.socket(zmq.REP)
File "*\AppData\Local\Programs\Python\Python38\lib\site-packages\zmq\sugar\context.py", line 204, in socket
s = self._socket_class(self, socket_type, **kwargs)
File "*\AppData\Local\Programs\Python\Python38\lib\site-packages\zmq\_future.py", line 144, in __init__
self._init_io_state()
File "*\AppData\Local\Programs\Python\Python38\lib\site-packages\zmq\asyncio\__init__.py", line 53, in _init_io_state
self.io_loop.add_reader(self._fd, lambda : self._handle_events(0, 0))
File "*\AppData\Local\Programs\Python\Python38\lib\asyncio\events.py", line 501, in add_reader
raise NotImplementedError
Моя интуиция заставляет меня думать, что это проблема с объявлением сокета на стороне сервера, но У меня нет проблем с объявлением сокета с использованием точно такого же синтаксиса на стороне клиента.