我正在使用autobahnpythonwebsocket实现并查看repohere上的broadscast服务器示例
在本例中,BroadcastServerProtocol
类通过self.factory
访问分配给它的工厂,这允许它将客户机注册到工厂实例。你知道吗
这是怎么回事?我在任何超类中都看不到factory
属性集,所以我猜在某个地方有一个函数将工厂分配给BroadcastServerProtocol
类,但我不确定在哪里。你知道吗
有人能解释一下这是怎么回事吗?为了便于阅读,我复制了下面示例中的相关代码。你知道吗
class BroadcastServerProtocol(WebSocketServerProtocol):
def onOpen(self):
self.factory.register(self)
def onMessage(self, payload, isBinary):
if not isBinary:
msg = "{} from {}".format(payload.decode('utf8'), self.peer)
self.factory.broadcast(msg)
def connectionLost(self, reason):
WebSocketServerProtocol.connectionLost(self, reason)
self.factory.unregister(self)
class BroadcastServerFactory(WebSocketServerFactory):
"""
Simple broadcast server broadcasting any message it receives to all
currently connected clients.
"""
def __init__(self, url):
WebSocketServerFactory.__init__(self, url)
self.clients = []
self.tickcount = 0
self.tick()
def tick(self):
self.tickcount += 1
self.broadcast("tick %d from server" % self.tickcount)
reactor.callLater(1, self.tick)
def register(self, client):
if client not in self.clients:
print("registered client {}".format(client.peer))
self.clients.append(client)
def unregister(self, client):
if client in self.clients:
print("unregistered client {}".format(client.peer))
self.clients.remove(client)
def broadcast(self, msg):
print("broadcasting message '{}' ..".format(msg))
for c in self.clients:
c.sendMessage(msg.encode('utf8'))
print("message sent to {}".format(c.peer))
目前没有回答
相关问题 更多 >
编程相关推荐