socket.io может подключаться, но не излучать на виртуальной машине глубокого обучения GCP - PullRequest
0 голосов
/ 23 апреля 2020

Мои настройки: на моем локальном компьютере запущен клиент 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?

...