在Heroku上使用TCP/IP套接字

4

我在Python中创建了一个TCP套接字监听程序。现在我正在尝试在Heroku上执行它。

Procfile: worker: python server.py jobs:work

Server.py:

def start_server():

    server_config = config['Server']

    # configurations
    HOST = server_config['HOST']
    PORT = int(environ.get('PORT')) #server_config.getint('PORT')
    BUFFER_SIZE = server_config.getint('BUFFER_SIZE')

    # server socket setup
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server_socket.bind((HOST, PORT))
    server_socket.listen(server_config.getint('LIMIT'))

    logging.info('server started %s:%d', HOST, PORT)

CLI:

F:\dev\>heroku run python server.py
Running python server.py on syswow64server... up, run.3213 (Free)
INFO:root:server started 0.0.0.0:14150

我知道Heroku使用内部端口映射网格,因此内部的14150端口不会映射到外部的14150端口。那么我该如何向服务器发送请求?要使用哪个端口呢?

我尝试了在80和443端口发送请求,但似乎它们没有映射到14150端口。

1个回答

3

您的Procfile应该像这样:

web: python server.py

部署完成后,请运行以下命令:
heroku ps:scale web=1

你的应用将在外部端口80上可用(URL为:your-app-name.herokuapp.com),这将自动路由到以下端口:

os.environ.get('PORT')

你正在内部监听。

诀窍在于将80路由到内部Web进程类型,而不是工作进程类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接