压测:Redis pubsub 实现 Locust 并发聚合点
一、需求:
步骤:
- 启一系列玩家比如5000个,300并发,先登录进入系统并保持tcp不断开
- 其中一个玩家发送消息,记录下发送时间
- 服务器广播给所有玩家,包括发送者
- 一段时间后,比如3秒,搜集所有玩家收到消息的时间戳;将这个时间戳减去发送时间,就是每个人收到聊天消息的时延
- 玩家最短发送消息时间10s
二、问题:
如果并发300,则需要等300人全部登陆后,一个玩家不断发送聊天信息;其他收消息。而Locust 没有并发聚合点,如果有哪个大佬知道有自带的方式请留言告知,谢谢。
三、实现方案:Redis pubsub 实现
- Redis Pool
# -*- coding: utf-8 -*-
"""
-------------------------------------------------
File Name: redis_pool.py
Date: 2021/10/29
Author: Allan
-------------------------------------------------
"""
import redis
from conf.server.conf import REDIS_URI
def singleton(cls):
""" 单例模式装饰器 """
instances = {
}
def get_instance(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return get_instance
@singleton
class RedisPool:
def __init__(self):
self.<