使用Python的http.server.HTTPServer模块创建基本的WebSocket服务器
发布时间:2024-01-09 20:51:09
WebSocket是一种在Web浏览器和服务器之间进行双向通信的协议。Python的http.server.HTTPServer模块可以用于创建基本的WebSocket服务器。下面是一个使用Python的http.server.HTTPServer模块创建WebSocket服务器的示例代码:
import http.server
import socketserver
from http import HTTPStatus
from websocket import WebSocketHandler, SimpleWebSocketServer
# 创建WebSocket处理类,继承自WebSocketHandler
class MyWebSocketHandler(WebSocketHandler):
def handle(self):
# 处理WebSocket连接
print("WebSocket连接建立")
self.send_message("欢迎来到WebSocket服务器!")
while True:
# 接收客户端消息
message = self.receive_message()
if message is None:
break
print("收到消息:", message)
# 发送响应消息
self.send_message("已收到消息:" + message)
def send_message(self, message):
# 发送消息给客户端
self.sendMessage(message)
def receive_message(self):
# 接收消息
return self.recv()
# 创建HTTP请求处理类
class MyHTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
# 判断是否为WebSocket连接请求
if self.path == "/websocket":
# 升级协议为WebSocket
self.send_response(HTTPStatus.SWITCHING_PROTOCOLS)
self.send_header("Upgrade", "websocket")
self.send_header("Connection", "Upgrade")
self.send_header("Sec-WebSocket-Accept", self.headers["Sec-WebSocket-Key"])
self.end_headers()
# 创建WebSocket服务器
server = SimpleWebSocketServer(self.rfile, self.wfile, self.headers)
server.handle_request()
else:
# 处理普通HTTP请求
super().do_GET()
# 创建服务器
server_address = ("", 8000)
httpd = socketserver.ThreadingTCPServer(server_address, MyHTTPRequestHandler)
# 启动服务器
print("服务器已启动,地址:http://localhost:8000")
httpd.serve_forever()
上述示例代码中,创建了一个WebSocket处理类MyWebSocketHandler,继承自WebSocketHandler。在handle()方法中,处理了WebSocket连接的建立和消息的发送接收。send_message()方法用于发送消息给客户端,receive_message()方法用于接收客户端发送的消息。
创建了一个HTTP请求处理类MyHTTPRequestHandler,继承自http.server.SimpleHTTPRequestHandler。在do_GET()方法中,判断请求路径是否为WebSocket连接请求,如果是的话,将请求升级为WebSocket连接并创建WebSocket服务器,否则处理普通HTTP请求。
然后创建了一个服务器对象httpd,使用socketserver.ThreadingTCPServer类创建,指定服务器地址和请求处理类。最后调用serve_forever()方法启动服务器。
运行该脚本后,即可在浏览器中访问http://localhost:8000,通过WebSocket连接进行双向通信。
需要注意的是,该示例使用了第三方库websocket,需要通过pip install websocket命令安装。
