python 中 websocket实现消息定时推送

本文介绍了如何在Python中使用WebSocket实现消息的定时推送。内容包括服务端(websocket_util.py)的实现、客户端(websocket_client.py)的创建,支持多个连接,并展示了在Flask项目中结合使用WebSocket的方法,以及Nginx配置WebSocket反向代理的步骤。示例代码和优化细节可供参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、socket服务端 websocket_util.py

import socket
import base64
import hashlib
from threading import Thread
import struct
import copy
import json
import time

from XX.redis_db import RedisDb

from utils.summary import summary
from utils.redis_util import RedisUtil
import config

redis_db = RedisDb(config.REDIS)
redis_util = RedisUtil()


class WebSocketUtil(object):

    global users
    users = set()

    def __init__(self, port=config.SOCKET_PORT, max_wait_user=5):
        self.sock = socket.socket()
        self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.sock.bind(("0.0.0.0", port))
        self.sock.listen(max_wait_user)

    # 请求头转换格式为字典
    def get_headers(self, data):
        """将请求头转换为字典"""
        header_dict = {}

        data = str(data, encoding="utf-8")

        header, body = data.split("\r\n\r\n", 1)
        header_list = header.split("\r\n")
        for i in range(0, len(header_list)):
            if i == 0:
                if len(header_list[0].split(" ")) == 3:
                    header_dict['method'], header_dict['url'], header_dict['protocol'] = header_list[0].split(" ")
            else:
                k, v = header_list[i].split(":", 1)
                header_dict[k] = v.strip()
        return header_dict

    # 等待用户连接
    def socket_connect(self):
        conn, addr = self.sock.accept()
        users.add(conn)
        # 获取握手消息,magic string ,sha1加密  发送给客户端  握手消息
        data = conn.recv(8096)
        headers = self.get_headers(data)
        # 对请求头中的sec-websocket-key进行加密
        response_tpl = "HTTP/1.1 101 Switching Protocols\r\n" \
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值