当前位置: 首页 > 知识库问答 >
问题:

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

羊舌诚
2023-03-14

该项目在具有任何指定端口的本地主机上进行测试时运行良好。但是,当我将服务器迁移到Heroku时,我收到了这个错误,因为Heroku设置了自己的端口供您使用,在这里我的代码指定了要使用的端口。我已经浏览了很多个小时,试图实现其他人使用OS.Environ[“端口”]等解决方案,但是由于我的Python新手和Twisted技能,我没有成功地让iOS应用程序在正确的端口上与Heroku服务器进行正确的通信。我的服务器代码如下:(注:我使用的是Twisted)

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()

共有1个答案

巫马心水
2023-03-14

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

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

在heroku dashboard中,选择您的应用程序,然后单击settings选项卡。

那么在您的Python中:

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(“port”)是否正确,我是凭空做的。

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

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()
 类似资料:
  • 我已经创建了一个Android应用程序,我想在应用程序上显示日历,以便用户可以选择一些日期。我试着用CalendarView完成它,但结果一无所获。在calendarView中,setMinDate将默认日历视图设置为2100,我想2038年之后的日期也有一些问题。 我需要做什么才能查看我的Android应用程序与过去的日子禁用日历。但不与日历视图,厌倦了,并尝试了它的一切!)

  • 我不清楚它们是什么,也不知道什么时候使用它们。 在这个例子中,我有一个REST客户端,我想发送一个文件(.zip文件),如果我使用其中任何一种类型,会发生什么 我猜application/octet-stream相当于application/zip,这只是为了向另一方提供有关传输数据的提示,文件以某种方式进行了编码 多部分/表单数据以某种方式破坏数据,您可以通过其特定的mime类型传递“多个数据”

  • 问题内容: 我最近开始建立一个大型的社交网络,我以为自己的结构很好,但事实证明我建立的逻辑很差。 我将自己的观点与AngularJS(不好的主意)混合在一起,跳过了刀片扩展,但是由于我使用了很多块和侧边栏,所以这变得很痛苦。 目前,我只是使用angular处理表单验证,但实际上我的所有网站页面都需要ajax,数据提取等功能。 我在网上搜索时,发现角度视图存储在公用文件夹中,但是由于我的所有页面都将

  • **Hola在清单文件中的权限: android.permission.receive_boot_completed android.permission.read_external_storage android.permission.write_external_storage android.permission.get_accounts android.permission.read_ph

  • 另外,为什么在键入Style标记的name属性时执行Ctrl+Space操作时看不到所有的r.attr元素? 请帮忙。谢了。

  • 我使用的是IntelliJIDEA CE edition(11.0.4)的最新版本。有一件事我在任何地方都找不到,它阻碍了我对Java/Spring的进一步改进。 控制器: 类:导入com.example.demo.interfaces.ISave; 类接口: 没什么特别的,只是为了掌握Spring和Java。 在我的控制器里,当我试图使用 我收到一个阻止应用启动的错误。以下是错误: 任务应用程序