Heroku Python套接字连接失败

时间:2019-01-12 21:58:51

标签: python sockets heroku

我正在尝试将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和其他Web服务器框架的示例...)。

编辑

经过一些日志记录后,看来172.18.17.53是始终连接到服务器并使它保持繁忙状态的IP。似乎该IP也无法访问,因为send()函数会阻止...

我尝试添加s.settimeout(0.05),但是对于send()方法却没有任何改变...

0 个答案:

没有答案