python编写 WebSocket 服务支持心跳机制与连接管理。

以下是使用Python实现的WebSocket服务,支持心跳机制和连接管理:


import asyncio

import websockets

import json

from datetime import datetime


class WebSocketManager:

    def __init__(self):

        self.connections = set()

        self.heartbeat_interval = 30  # 心跳间隔(秒)

        self.timeout = 60  # 连接超时时间(秒)


    async def register(self, websocket):

        self.connections.add(websocket)

        print(f"New connection. Total: {len(self.connections)}")


    async def unregister(self, websocket):

        self.connections.remove(websocket)

        print(f"Connection closed. Total: {len(self.connections)}")


    async def heartbeat(self, websocket):

        while websocket in self.connections:

            try:

                await websocket.ping()

                await asyncio.sleep(self.heartbeat_interval)

            except:

                await self.unregister(websocket)

                break


    async def handler(self, websocket, path):

        await self.register(websocket)

        heartbeat_task = asyncio.create_task(self.heartbeat(websocket))

        

        try:

            async for message in websocket:

                data = json.loads(message)

                if data.get('type') == 'heartbeat':

                    continue

                

                # 处理业务消息

                response = {"status": "success", "data": data}

                await websocket.send(json.dumps(response))

        finally:

            heartbeat_task.cancel()

            await self.unregister(websocket)


async def main():

    manager = WebSocketManager()

    server = await websockets.serve(

        manager.handler,

        "localhost",

        8765,

        ping_interval=None  # 禁用自动ping

    )

    print("WebSocket server started at ws://localhost:8765")

    await server.wait_closed()


if __name__ == "__main__":

    asyncio.run(main())


 asyncio

import websockets

import json


async def client():

    async with websockets.connect("ws://localhost:8765") as websocket:

        # 发送心跳

        async def send_heartbeat():

            while True:

                await asyncio.sleep(10)

                await websocket.send(json.dumps({"type": "heartbeat"}))


        heartbeat_task = asyncio.create_task(send_heartbeat())

        

        try:

            # 发送测试消息

            await websocket.send(json.dumps({"message": "Hello"}))

            response = await websocket.recv()

            print(f"Received: {response}")

            

            # 保持连接

            await asyncio.sleep(60)

        finally:

            heartbeat_task.cancel()


asyncio.run(client())



该实现包含服务端和客户端示例,支持心跳检测、连接管理和异常处理。服务端使用websockets库,通过自定义心跳机制和连接池管理WebSocket连接。

http://www.thedesignrepublic.com/

http://www.yxhgq.com/

http://www.jianhuotech.com/

http://www.bjyozd.com

http://www.sunny-way.cn/

http://www.cnsenkai.com/

http://www.zluren.com.cn/

http://www.cddtk119.com/

http://www.boao168.com.cn/

http://www.czs365.net/

http://www.ianvan.com/

http://www.fangzhoushidai.com

http://www.qiaosen-kj.com

http://gzhyxjj.cn

http://xatlzg.com

http://www.doushiwang.cn

http://www.sxyuanzheng.com

http://www.jwdyd.com

http://www.xaminglang.com

http://www.lboneti.cn

http://www.ahlongda.com

http://www.gdlanye.com

http://www.ktlcutter.com

http://www.hbzfjn.com

http://www.shbaimule.com

http://www.clgzkj.com

http://www.fjjhwy.cn

http://www.goodluck-lift.com

http://www.storlead.shop

http://magicians.com.cn

http://mall.yeepayer.com

http://tzkqzj.com

http://www.jinfanweilai.com

https://www.durkflex.cn/

http://www.szfmhj168.com.cn/

http://hfnz.ahaiba.com/

http://sjmzjypx010.ahaiba.com/

http://nyh.ahaiba.com/

http://thszsgs.com/

https://www.durkflex.cn/

http://www.szfmhj168.com.cn/

http://hfnz.ahaiba.com/

http://sjmzjypx010.ahaiba.com/

http://nyh.ahaiba.com/

http://thszsgs.com/

http://www.mataicomp.com/

http://www.mattei.com.cn/

http://wssyjt.com/

http://www.hbws.cn/

http://wesddc.com/

http://www.shtddaiyun.com/

http://qsyfzl.com/

请使用浏览器的分享功能分享到微信等