欢迎访问宙启技术站
智能推送

使用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命令安装。