WebSockets是HTML5中新添加的协议,使得双向通信得以实现,类似于传统的套接字。Python是一种高级编程语言,具有可扩展性和易读性等特性,使其成为了实现WebSockets服务器端的理想选择。这篇文章将从多个方面介绍Python WebSocket服务器端。
一、WebSocket介绍
WebSocket是一种在单个TCP套接字上进行全双工通信的协议。它使得数据可以在客户端和服务器之间进行双向传输,服务器可以在任何时候向客户端推送新的消息。
WebSocket 协议建立在HTTP协议之上,使用HTTP的握手请求,服务器来响应客户端的请求,并实现从HTTP协议到WebSocket协议的升级
二、Python WebSocket库
Python有很多WebSocket库,这里我们介绍三个:Tornado、Twisted和WebSocket-Server。
Tornado
import tornado.websocket class EchoWebSocket(tornado.websocket.WebSocketHandler): def open(self): print("WebSocket 开启") def on_message(self, message): self.write_message(u"收到消息: " + message)
Twisted
from twisted.internet import protocol, reactor from twisted.web.server import Site from twisted.web.static import File from twisted.python import log import sys from autobahn.twisted.websocket import WebSocketServerProtocol from autobahn.twisted.websocket import WebSocketServerFactory class MyServerProtocol(WebSocketServerProtocol): def onConnect(self, request): print("WebSocket 连接来自 {}".format(request.peer)) def onOpen(self): print("WebSocket 连接开启") 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'))) # 反弹回去 self.sendMessage(payload, isBinary) def onClose(self, wasClean, code, reason): print("WebSocket 连接关闭") if __name__ == '__main__': factory = WebSocketServerFactory(u"ws://127.0.0.1:9000") factory.protocol = MyServerProtocol reactor.listenTCP(9000, factory) reactor.run()
WebSocket-Server
from websocket_server import WebsocketServer # 当一个消息被接收后触发该函数。 def new_client(client, server): print("WebSocket 连接来自 {}".format(client['address'])) # 创建 WebSocket 服务器。 server = WebsocketServer(8080, host='127.0.0.1') # 绑定 "new_client" 函数。 server.set_fn_new_client(new_client) # 启动 WebSocket 服务器并保持打开状态。 server.run_forever()
三、使用WebSocket在Python服务器端与客户端通信
WebSocket是实现实时通信的一个好方法,下面是使用Python WebSocket-Server库实现的一个例子:
import time from websocket_server import WebsocketServer # 当一个WebSocket消息接收到时触发该函数。 def message_received(client, server, message): print("WebSocket消息,来自 {}: {}".format(client['address'], message)) server.send_message(client, "I got your message: " + message) # 如果有一个WebSocket客户端连接,则调用该函数。 def new_client(client, server): print("有一个新的WebSocket客户端连接来自 {}:{}".format(client['address'][0], client['address'][1])) server.send_message_to_all("有一个新的WebSocket客户端连接来自 {}:{}".format(client['address'][0], client['address'][1])) # 等待 WebSocket 连接。 server = WebsocketServer(8080, host='127.0.0.1') server.set_fn_new_client(new_client) server.set_fn_message_received(message_received) server.run_forever()
四、总结
本文介绍了Python WebSocket服务器端,从WebSocket协议、Python WebSocket库以及实现WebSocket在Python服务器端与客户端通信三个方面进行了阐述。WebSockets是实现实时通信的重要技术,Python作为一种高级编程语言,具有可扩展性和易读性等特点,使其成为实现WebSockets服务器端的理想选择。