Mik*_*eDW 3 python twisted twisted.web twisted.internet
我使用Twisted创建了一个带有自定义协议的服务器,我的客户端连接到特定端口(例如端口1234)上的服务器.我希望基于某种类型的网页为服务器创建一个控制界面.我的研究表明,Nevow是受欢迎的选择,但我只需要一些非常简单的东西.
比如说,每次浏览器访问端口8080上的hello world页面时,我都会向1234上连接的客户端发送消息.
关于如何将这两个连接在一起,我有点困惑.我假设我需要从HelloResource.render_GET调用Server.message?
from twisted.internet import protocol, reactor
from twisted.web.resource import Resource
class Server(protocol.Protocol):
def dataReceived(self, data):
#do something on the server side
def message(self)
#send message to clients
class HelloResource(Resource):
isLeaf = True
def render_GET(self,request):
return "<html>Hello, world!</html>"
factory = protocol.Factory()
factory.protocol = Server
reactor.listenTCP(1234, factory)
reactor.listenTCP(8080, server.Site(HelloResource()))
reactor.run()
Run Code Online (Sandbox Code Playgroud)
这与Twisted FAQ中回答的问题非常相似.
实质上,您需要使工厂创建的协议实例可以访问构成Web服务器的资源.
一个简单的方法是让工厂保留一个协议实例列表(buildProtocol如果你还没有读过),然后将工厂实例传递给HelloResource初始化程序,然后让初始化程序将工厂保存为HelloResource实例的属性.
这将HelloResource访问协议实例列表 - 通过它现在具有引用的工厂对象 - 然后它可以迭代,例如,在每个协议实例上调用方法.
| 归档时间: |
|
| 查看次数: |
330 次 |
| 最近记录: |