Не удается установить сокет Heroku Python - PullRequest
0 голосов
/ 13 января 2019

Я пытаюсь развернуть сервер сокетов Python на Heroku, но кажется, что соединение с сокетами сделано неправильно ... В моем случае, метод accept() должен подождать, пока будет установлено сокетное соединение, но кажется, что он срабатывает, даже если я не запускаю свой client.py скрипт ...

Кроме того, при запуске клиента соединение действительно установлено, но сервер не получает и не отправляет данные ...

Что я делаю не так? Все это работает локально ... (изменяя порт с 80 на 12345 и адрес на localhost) ...

Вот что у меня есть:

# server.py
import socket
import os

server = socket.socket()
port = int(os.environ.get("PORT", 12345))
server.bind(("0.0.0.0", port))
server.listen(5)

# should wait for an actual connection, but fires right away
s, _ = server.accept()

# should wait to receive "Hello, world! (from client)", but receives b''
s.recv(1024)

s.send("Hello, world! (from server)".encode())

s.close()
# client.py
import socket

s = socket.socket()

print("connecting to server...")
# "...my-heroku-app.." changed to the actual heroku app url
s.connect(("my-heroku-app.herokuapp.com", 80))

print("sending data...")
s.send("Hello, world! (from client)".encode())

print("receiving data...")

# should receive "Hello, world! (from server)",
# but blocks because the server already stopped
print(s.recv(1024).decode())

s.close()
# Procfile
web: python server.py

Я также пытался поместить s.recv() в цикл до тех пор, пока полученные данные не будут равны None, а просто зацикливаются навсегда ... (на стороне сервера)

Что я здесь не так делаю? Правильно ли привязан сервер (адрес и порт)? Heroku поддерживает такой сервер? Кажется, я не нашел никакой информации о том, как это сделать (есть только примеры использования Flask и других фреймворков веб-серверов ...).

EDIT

После некоторой регистрации кажется, что 172.18.17.53 - это IP-адрес, который всегда подключается к серверу и поддерживает его занятость. Также кажется, что этот IP-адрес недоступен, потому что функциональные блоки send () ...

Я пытался добавить s.settimeout(0.05), но он ничего не изменил для метода send() ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...