2013-04-20 68 views
0

我有一個在我的電腦上運行的python腳本。它打開一個套接字並打印接收到的任何東西。這絕對有效 - 我已經設法從其他計算機連接到它併發送數據。Heroku,燒瓶和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應用在超時後在第二行失敗。當我在我的筆記本電腦或朋友的筆記本電腦上運行相同的東西時(雖然在這兩種情況下作爲服務器的python腳本都在我的筆記本電腦上運行),但它起作用。有誰知道爲什麼heroku會有這個問題嗎?謝謝!

+0

IIRC,Heroku只允許來自端口80和443的外部連接。 – Blender 2013-04-20 20:11:58

+0

在另一臺機器上測試時,是否使用了相同的腳本? – timss 2013-04-20 20:24:09

+0

應該限制它可以連接哪個端口影響它可以連接的端口_to_?我的筆記本電腦上的套接字在端口50000上偵聽。我沒有指定heroku應用程序應該使用哪個端口。所有機器上的python腳本都是一樣的。 – bee 2013-04-20 20:53:12

回答

1

在Heroku上運行時,您的服務器應綁定到環境變量PORT中指定的端口(例如7880,僅用於討論)。不保證是80,5000,8000,8080或其他任何東西。

到了外面的世界,但是,這將顯示爲端口80或443。也就是說,如果從Heroku的外部連接,客戶端將連接到端口80

最後一個警告:連接時從Heroku外部,你的客戶將通過「Heroku路由網格」,其中包括80 - >端口「翻譯」。問題是,路由網格是一個HTTP路由網格:它只接受傳入的HTTP請求,並將它們(有時在改變它們之後,比如添加頭文件等)路由到你的dyno。

因此,您不能只在Heroku上編寫簡單套接字應用程序並直接連接它,則必須使用HTTP作爲傳輸。