如何 运行 非网络 Python Heroku 中的 Twisted 脚本
How to run non-web Python Twisted script in Heroku
会有懂Heroku和twisted的人吗?
我在自己的电脑上测试过扭曲的代码
客户端调用服务器时
服务器将return消息发送给客户端
我的目的是把服务器放在heroku上,让客户端调用它和return消息,不用用web。
问题
当我将服务器代码移至 Heroku 时
如何启动server.py?
如何在client.py中设置ip?
我使用 git 从 Getting Started on Heroku with Python
克隆 heroku 官方代码
下载后我做的步骤
在requirements.txt
中增加twisted == 1.6.0
在Procfile中增加worker: python server.py runserver 0.0.0.0: 5000
(server.py是乱码)
3.git push heroku master
- 转到资源页面开始
worker: python manage.py runserver 0.0.0.0:5000
已尝试client.py ("0.0.0.0", 5000, f)中的connectTCP设置,但没有响应
点击打开app时会出现错误信息(不过我没用过网站....)
查看日志
at=error code=H14 desc="No web processes running" method=GET path="/" host=bitserver.herokuapp.com request_id=778e3bd2-310d-4d8d-aa75-737a1d89efdc fwd="220.130.40.2" dyno= connect= service= status=503 bytes=
脚本信息
server.py
from twisted.internet import protocol, reactor
import os
class Knock(protocol.Protocol):
def dataReceived(self, data):
print 'Client:', data
if data.startswith("Hey, Heroku!"):
response = "Hi, please wait..."
self.transport.write(response)
else:
response = "I don't know who you are!"
self.transport.write(response)
class KnockFactory(protocol.Factory):
def buildProtocol(self, addr):
return Knock()
reactor.listenTCP(5000, KnockFactory())
reactor.run()
client.py
from twisted.internet import protocol, reactor
class KnockClient(protocol.Protocol):
def connectionMade(self):
self.transport.write("Hey, Heroku!")
def dataReceived(self, data):
if data.startswith("Hi, please wait..."):
print ("Heroku:",data)
self.transport.loseConnection()
reactor.stop()
else:
print ("Heroku:",data)
self.transport.loseConnection()
reactor.stop()
class KnockFactory(protocol.ClientFactory):
protocol = KnockClient
def main():
f = KnockFactory()
reactor.connectTCP("0.0.0.0", 5000, f)
reactor.run()
if __name__ == '__main__':
main()
我在其他论坛上得到了答案
Only web process types can receive connections, you'll need to setup any servers in the same way that you would with a web server, i.e., binging to 0.0.0.0:$PORT.
会有懂Heroku和twisted的人吗?
我在自己的电脑上测试过扭曲的代码
客户端调用服务器时
服务器将return消息发送给客户端
我的目的是把服务器放在heroku上,让客户端调用它和return消息,不用用web。
问题
当我将服务器代码移至 Heroku 时
如何启动server.py?
如何在client.py中设置ip?
我使用 git 从 Getting Started on Heroku with Python
克隆 heroku 官方代码下载后我做的步骤
在requirements.txt
中增加在Procfile中增加
worker: python server.py runserver 0.0.0.0: 5000
(server.py是乱码)
twisted == 1.6.0
3.git push heroku master
- 转到资源页面开始
worker: python manage.py runserver 0.0.0.0:5000
已尝试client.py ("0.0.0.0", 5000, f)中的connectTCP设置,但没有响应
点击打开app时会出现错误信息(不过我没用过网站....)
查看日志
at=error code=H14 desc="No web processes running" method=GET path="/" host=bitserver.herokuapp.com request_id=778e3bd2-310d-4d8d-aa75-737a1d89efdc fwd="220.130.40.2" dyno= connect= service= status=503 bytes=
脚本信息
server.py
from twisted.internet import protocol, reactor
import os
class Knock(protocol.Protocol):
def dataReceived(self, data):
print 'Client:', data
if data.startswith("Hey, Heroku!"):
response = "Hi, please wait..."
self.transport.write(response)
else:
response = "I don't know who you are!"
self.transport.write(response)
class KnockFactory(protocol.Factory):
def buildProtocol(self, addr):
return Knock()
reactor.listenTCP(5000, KnockFactory())
reactor.run()
client.py
from twisted.internet import protocol, reactor
class KnockClient(protocol.Protocol):
def connectionMade(self):
self.transport.write("Hey, Heroku!")
def dataReceived(self, data):
if data.startswith("Hi, please wait..."):
print ("Heroku:",data)
self.transport.loseConnection()
reactor.stop()
else:
print ("Heroku:",data)
self.transport.loseConnection()
reactor.stop()
class KnockFactory(protocol.ClientFactory):
protocol = KnockClient
def main():
f = KnockFactory()
reactor.connectTCP("0.0.0.0", 5000, f)
reactor.run()
if __name__ == '__main__':
main()
我在其他论坛上得到了答案
Only web process types can receive connections, you'll need to setup any servers in the same way that you would with a web server, i.e., binging to 0.0.0.0:$PORT.