================客户端=================
from autobahn.asyncio.websocket import WebSocketClientProtocol, \
WebSocketClientFactory
try:
import asyncio
except ImportError:
import trollius as asyncio
class MyClientProtocol(WebSocketClientProtocol):
def onConnect(self, response):
print("请求连接服务端: {0}".format(response.peer))
async def onOpen(self):
print("成功服务端连接.")
while True:
self.sendMessage(u"Hello, world!".encode('utf8'))
# self.sendMessage(b"\x00\x01\x03\x04", isBinary=True)
await asyncio.sleep(1)
def onMessage(self, payload, isBinary):
if isBinary:
print("接受到服务端的字节信息: {0} bytes".format(len(payload)))
else:
print("接受到服务端的文本信息: {0}".format(payload.decode('utf8')))
def onClose(self, wasClean, code, reason):
print("断开与服务端连接的原因: {0}".format(reason))
if __name__ == '__main__':
factory = WebSocketClientFactory(u"ws://127.0.0.1:9000")
factory.protocol = MyClientProtocol
loop = asyncio.get_event_loop()
coro = loop.create_connection(factory, '127.0.0.1', 9000)
loop.run_until_complete(coro)
loop.run_forever()
loop.close()
=======================服务端========================
from autobahn.asyncio.websocket import WebSocketServerProtocol, \
WebSocketServerFactory
class MyServerProtocol(WebSocketServerProtocol):
def onConnect(self, request):
print("连接到客户端: {0}".format(request.peer))
def onOpen(self):
print("已有客户端成功连接.")
def onMessage(self, payload, isBinary):
if isBinary:
print("接收到客服端字节信息: {0} bytes".format(len(payload)))
else:
print("接收到客服端文本信息: {0}".format(payload.decode('utf8')))
# echo back message verbatim
self.sendMessage(payload, isBinary)
def onClose(self, wasClean, code, reason):
print("断开与客户端的连接原因: {0}".format(reason))
if __name__ == '__main__':
import asyncio
factory = WebSocketServerFactory(u"ws://127.0.0.1:9000")
factory.protocol = MyServerProtocol
loop = asyncio.get_event_loop()
coro = loop.create_server(factory, '0.0.0.0', 9000)
server = loop.run_until_complete(coro)
try:
loop.run_forever()
except KeyboardInterrupt:
pass
finally:
server.close()
loop.close()