websocket概述

WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

Python第三方库websocket

websocket是一个Python实现的基于websocket协议的操作lib库。

通过websocket库可以实现websocket的客户端与服务端。

安装方式如下:

  1. pip3 install websocket

Python Websocket服务端

下面,我们来参考一个基于Python的Websocket服务端实例Demo:

将下列内容保存为server.py

  1. # -*- coding: UTF-8 -*-
  2. """
  3. # www.missshi.cn
  4. """
  5. import time
  6. import asyncio
  7. import websockets
  8. async def hello(websocket, path):
  9. """
  10. # 定义异步函数
  11. :param websocket:
  12. :param path:
  13. :return:
  14. """
  15. print("requests url: %s" % path)
  16. name = await websocket.recv()
  17. print("receive message: %s" % name)
  18. greeting = "Hello %s!" % name
  19. await websocket.send(greeting)
  20. while True:
  21. await websocket.send("what happened")
  22. print("send message: %s" % greeting)
  23. time.sleep(1)
  24. # 启动服务
  25. start_server = websockets.serve(hello, "localhost", 8765)
  26. asyncio.get_event_loop().run_until_complete(start_server)
  27. asyncio.get_event_loop().run_forever()

Python Websocket客户端

将下列内容保存为client.py

  1. # -*- coding: UTF-8 -*-
  2. """
  3. # www.missshi.cn
  4. """
  5. import asyncio
  6. import websockets
  7. async def hello():
  8. """
  9. # 发送ws消息
  10. :return:
  11. """
  12. uri = "ws://localhost:8765/123"
  13. async with websockets.connect(uri) as websocket:
  14. name = "missshi!"
  15. await websocket.send(name)
  16. print("send message: %s" % name)
  17. while True:
  18. greeting = await websocket.recv()
  19. print("receive message: %s" % greeting)
  20. asyncio.get_event_loop().run_until_complete(hello())

demo运行

下面,我们第一步首先要启动服务端:

  1. python3 ./server.py

然后,打开另外一个终端,启动客户端:

  1. python3 ./client.py