Можно ли разместить приложение python, которое использует websockets на heroku? Я не хочу использовать какие-либо фреймворки, такие как flask или django, просто старые веб-сокеты с библиотекой sockets
. Я пытался заставить его работать, но heroku, кажется, зависает и крадет sh всякий раз, когда клиент подключается к нему. Я не думаю, что что-то не так с моим кодом, потому что, когда я размещаю сервер локально на своем компьютере, все работает нормально, как и ожидалось. Он перестает работать, только когда я использую heroku ...
Я посмотрел на этот вопрос и попытался последовать совету, но он просто мгновенно сломал сервер, и когда я попытался соединиться с моим клиент, он просто сказал бы, не может получить адрес. Код ниже - это то, что я сейчас использую, хотя бы частично это работает:
client.py:
import socket
HOST = 'my-heroku-app.herokuapp.com' # The server's hostname or IP address
PORT = 80 # The port used by the server
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
print("Connected")
s.sendall(b'Hello, world')
data = s.recv(1024)
print('Received', repr(data))
server.py:
import socket
import os
HOST = '127.0.0.1' # Standard loopback interface address (localhost)
PORT = int(os.getenv('PORT')) # Port to listen on (non-privileged ports are > 1023)
print(PORT)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print('Connected by', addr)
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
server.py
запускается с веб-процессом, поэтому он может получать трафик c.
Когда я запускаю client.py
, консоль выводит Connected
, но серверный скрипт просто не принимает соединение, и примерно через 5 секунд он просто падает. Я что-то не так делаю, или heroku обрабатывает только http, а не websockets? Любая информация по этому вопросу будет принята с благодарностью.