Aim*_*mee 5 python twisted heroku
所以我创建了2个iOS应用程序(一个发送坐标,一个接收它们)和一个python服务器.其中一个应用程序将GPS坐标发送到我在heroku上托管的python服务器.然后,服务器将接收到的GPS坐标发送到OTHER iOS客户端应用程序,该应用程序将在接收的坐标上放置Apple Maps引脚.
在使用任何指定端口在本地主机上测试时,该项目完美运行.但是,当我将服务器迁移到Heroku时,我收到此错误发生错误,因为Heroku设置了它自己的端口供您使用,其中我的代码指定使用哪个端口.我一直在浏览SO,试图实现其他人的解决方案,他们使用os.environ ["PORT"]等等,但是由于我的新手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()
Run Code Online (Sandbox Code Playgroud)
Heroku在您的设置中有一个部分,您可以在其中定义环境变量.
在本地运行Django时我有类似的情况,但类似的修复可能会对你有所帮助.
在heroku仪表板中,选择您的应用程序,然后单击设置选项卡.
然后,如果您单击显示配置变量并ON_HEROKU使用该值添加密钥名称(或类似的东西,如果您愿意)True.
然后在你的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
Run Code Online (Sandbox Code Playgroud)
我不是100%肯定如果得到('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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2498 次 |
| 最近记录: |