首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在heroku python应用程序上使用什么端口?

在heroku python应用程序上使用什么端口?
EN

Stack Overflow用户
提问于 2015-01-12 10:17:50
回答 2查看 6.8K关注 0票数 8

因此,我创建了两个iOS应用程序(一个发送坐标,一个接收坐标)和一个python。其中一个应用程序将GPS坐标发送给我托管在heroku上的python服务器。然后,服务器将发送接收到的全球定位系统坐标到另一个iOS客户端应用程序,该应用程序将在接收到的坐标上放置一个苹果地图引脚。

在本地主机上使用任何指定的端口进行测试时,该项目运行良好。但是,当我将服务器迁移到Heroku时,我接收到了this error,因为Heroku设置了自己的端口供您使用,因为我的代码指定要使用哪个端口。我已经浏览了好几个小时,试图在其他人的解决方案中使用os.environ["PORT"]等等,但是由于我的新手Python和Twisted技巧,我还没有成功地让iOS应用程序在正确的端口上与Heroku服务器进行正确的通信。我的服务器代码如下:(注意:我使用的是Twisted)

代码语言:javascript
运行
复制
import os
from twisted.internet.protocol import Protocol, Factory
from twisted.internet import reactor

class IphoneChat(Protocol):
def connectionMade(self):
    #self.transport.write("""connected""")
    self.factory.clients.append(self)
    print "clients are ", self.factory.clients

def connectionLost(self, reason):
    self.factory.clients.remove(self)

def dataReceived(self, data):
    #print "data is ", data
    a = data.split(':')
    if len(a) > 1:
        command = a[0]
        content = a[1]

        msg = ""
        if command == "new":
            self.name = content
            msg = content

        elif command == "msg":
            msg = self.name + ": " + content

        print msg

        for c in self.factory.clients:
            c.message(msg)

def message(self, message):
    self.transport.write(message + '\n')


factory = Factory()
factory.protocol = IphoneChat
factory.clients = []
port = 3000
reactor.listenTCP(port, factory)
print "Iphone Chat server started on port ", port
reactor.run()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-12 10:29:43

Heroku在您的设置中有一个部分,可以在其中定义环境变量。

在本地运行Django时,我也遇到了类似的情况,但类似的修复可能会对您有所帮助。

在heroku仪表板中,选择应用程序,然后单击“设置”选项卡。

然后,如果您单击“显示配置vars”并使用值ON_HEROKU添加键名True (如果您愿意的话,也可以添加类似的名称)。

然后在你的蟒蛇里:

代码语言:javascript
运行
复制
import os
ON_HEROKU = os.environ.get('ON_HEROKU')

if ON_HEROKU:
    # get the heroku port
    port = int(os.environ.get('PORT', 17995))  # as per OP comments default is 17995
else:
    port = 3000

我不能百分之百确定get(港口)是否是正确的,我是从头上做的。

将其实现到您自己的代码中将涉及以下内容:

代码语言:javascript
运行
复制
factory = Factory()
factory.protocol = IphoneChat
factory.clients = []

import os
ON_HEROKU = os.environ.get('ON_HEROKU')
if ON_HEROKU:
    # get the heroku port 
    port = int(os.environ.get("PORT", 17995))  # as per OP comments default is 17995
else:
    port = 3000

reactor.listenTCP(port, factory)
print "Iphone Chat server started on port %s" % port
reactor.run()
票数 13
EN

Stack Overflow用户

发布于 2019-03-20 12:19:16

答案如下。该端口由Heroku在环境变量中设置,在本例中,只有在缺少端口环境变量(在本地)时才在本地使用17995。

代码语言:javascript
运行
复制
port = int(os.environ.get("PORT", 17995))
app.run(host='0.0.0.0', port=port)

来源:django

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27899666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档