Мои настройки: на моем локальном компьютере запущен клиент python socket.io и сервер на экземпляре GCP. Я использую учебный код basi c socket.io. Проблема заключается в том, что клиент будет подключаться к экземпляру, но он не может излучать. Вот фрагменты клиента и сервера.
http_client.py
import socketio
client = socketio.Client()
@client.event
def connect():
print('Client: connected')
@client.event
def disconnect():
print('Client: disconnected')
@client.event
def basicReply():
print(f"From Server: basic reply")
if __name__ == '__main__':
client.connect("http://35.229.56.147:80") # ephemeral IP
client.emit('basicMessage')
client.sleep(2)
client.disconnect()
http_server.py
import socketio
server = socketio.Server()
wsgi_app = socketio.WSGIApp(server)
@server.event
def connect(sid, environ):
print(f"Server: connected {sid[:6]}")
@server.event
def disconnect(sid):
print(f"Server: disconnected {sid[:6]}")
@server.event
def basicMessage(sid):
print(f"From client: basic message")
server.emit('basicReply')
Я использую 2 разных случая, чтобы объяснить эту проблему. Первая - это обычная виртуальная машина Compute Engine, к которой подключен графический процессор (используется python 3.6). Второй - Deep Learning VM (использующий python 3.8, который я установил). Для обычной виртуальной машины связь http работает как положено. Однако для Deep Learning клиент подключается, но не может излучать.
клиент, подключающийся к обычному серверу Compute Engine
(v2) C:\Projects\MicroServer\CodeBase\server>python http_client.py
Client: connected
From Server: basic reply
на обычном компьютере Compute Engine
philip@pose:~/codebase/server$ sudo gunicorn3 --bind 0.0.0.0:80 http_server:wsgi_app
[2020-04-23 14:41:12 +0000] [3076] [INFO] Starting gunicorn 19.7.1
[2020-04-23 14:41:12 +0000] [3076] [INFO] Listening at: http://0.0.0.0:80 (3076)
[2020-04-23 14:41:12 +0000] [3076] [INFO] Using worker: sync
[2020-04-23 14:41:12 +0000] [3079] [INFO] Booting worker with pid: 3079
Server: connected 06459d
From client: basic message
[2020-04-23 14:41:46 +0000] [3076] [CRITICAL] WORKER TIMEOUT (pid:3079)
[2020-04-23 14:41:46 +0000] [3079] [INFO] Worker exiting (pid: 3079)
[2020-04-23 14:41:47 +0000] [3097] [INFO] Booting worker with pid: 3097
клиент, подключающийся к Deep Learning VM
(v2) C:\Projects\MicroServer\CodeBase\server>python http_client.py
Client: connected
сервер на Deep Learning VM
philip@posekeypoints-deb-vm:~/codebase/server$ sudo gunicorn --bind 0.0.0.0:80 http_server:wsgi_app
[2020-04-23 14:47:01 +0000] [2325] [INFO] Starting gunicorn 20.0.4
[2020-04-23 14:47:01 +0000] [2325] [INFO] Listening at: http://0.0.0.0:80 (2325)
[2020-04-23 14:47:01 +0000] [2325] [INFO] Using worker: sync
[2020-04-23 14:47:01 +0000] [2327] [INFO] Booting worker with pid: 2327
Server: connected 81a8d0
[2020-04-23 14:47:36 +0000] [2325] [CRITICAL] WORKER TIMEOUT (pid:2327)
[2020-04-23 14:47:36 +0000] [2327] [INFO] Worker exiting (pid: 2327)
[2020-04-23 14:47:37 +0000] [2342] [INFO] Booting worker with pid: 2342
Как видите, клиент подключается, но не излучает на сервере Deep Learning. Код работает, серверы работают на своих экземплярах, а правила брандмауэра настроены на http:80. Почему он не работает на Deep Learning VM?