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服务器端的理想选择。
原创文章,作者:WZIY,如若转载,请注明出处:https://www.506064.com/n/150241.html
微信扫一扫
支付宝扫一扫