我想从一个单独的线程使用sendMessage()
之外的MyServerProtocol
向客户机发送消息。你知道吗
我正在尝试一些非常类似于this和this的东西,但没有成功。你知道吗
第一个解决方案使用twisted,第二个解决方案使用“broadcast\u message()”,这会引发以下错误
for c in set(cls.connections):
AttributeError: type object 'MyServerProtocol' has no attribute 'connections'
我的代码:
class MyServerProtocol(WebSocketServerProtocol):
loop = None
def onConnect(self, request):
print("Client connecting: {0}".format(request.peer))
def onOpen(self):
print("WebSocket connection open.")
def onMessage(self, payload, isBinary):
if isBinary:
print("Binary message received: {0} bytes".format(len(payload)))
else:
print("Text message received: {0}".format(payload.decode('utf8')))
def onClose(self, wasClean, code, reason):
print("WebSocket connection closed: {0}".format(reason))
@classmethod
def broadcast_message(cls, data):
payload = bytes(data, encoding='utf8')
for c in set(cls.connections):
self.loop.call_soon_threadsafe(cls.sendMessage, c, payload)
if __name__ == '__main__':
import asyncio
factory = WebSocketServerFactory(u"ws://127.0.0.1:9080")
factory.protocol = MyServerProtocol
loop = asyncio.get_event_loop()
MyServerProtocol.loop = loop
coro = loop.create_server(factory, '0.0.0.0', 9080)
server = loop.run_until_complete(coro)
vad_thread = threading.Thread(target=main, args=(ARGS,))
vad_thread.start()
try:
loop.run_forever()
print("this will not print")
except KeyboardInterrupt:
pass
finally:
server.close()
loop.close()
从vadèu thread,我打电话给:
MyServerProtocol.broadcast_message(payload)
抛出上述错误。你知道吗
我想要一个函数,比如send_message(payload)
,它将有效负载发送到客户机。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐