3

私のコンピューターで実行される python スクリプトがあります。ソケットを開き、受け取ったものをすべて出力します。これは間違いなく機能します。他のコンピューターから接続してデータを送信することができました。

問題は、heroku アプリがソケットに接続できないことです。

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    
s.connect((daemon_socket_vars['host'], daemon_socket_vars['port']))
s.send("Hi!")
s.close()

タイムアウト後、heroku アプリは 2 行目で失敗します。私のラップトップまたは友人のラップトップで同じものを実行すると(サーバーとして機能するpythonスクリプトが両方の場合で私のラップトップで実行されている間)、動作します。なぜherokuがこれに問題があるのか​​ 知っている人はいますか? ありがとう!

4

1 に答える 1

3

Heroku で実行する場合、サーバーは環境変数 PORT で指定されたポート (この説明のために 7880 とします) にバインドする必要があります。80、5000、8000、8080、またはその他であるとは限りません。

ただし、外部からは、これはポート 80 またはポート 443 として表示されます。つまり、Heroku の外部から接続する場合、クライアントはポート 80 に接続します。

最後に 1 つ注意点があります。Heroku の外部から接続する場合、クライアントは「Heroku ルーティング メッシュ」を経由します。これは、特に 80 --> 何かのポート「変換」を行います。問題は、ルーティング メッシュが HTTP ルーティング メッシュであるということです。着信 HTTP リクエストのみを受け入れ、それらを (ヘッダーの追加など、時々変更した後に) dyno にルーティングします。

したがって、Heroku で単純なソケット アプリを作成して直接接続するだけでは、HTTP をトランスポートとして使用する必要があります。

于 2013-04-22T05:58:49.717 に答える