使用websockets和redis的实时消息服务器。
cobras的Python项目详细描述
一般
cobra是一个使用python3、websockets和redis流的实时消息服务器。它在RedisConf 2019期间被详细介绍。从那时起,我们添加了历史支持,它允许cobra保留发布到一个没有人订阅的频道的消息。这使得通过OOMs炸毁系统并填满硬盘变得更容易,但它使cobra更加有用。
眼镜蛇已经在交通繁忙的生产中使用了大约一年。因为它是用python编写的,所以它以一条蛇的名字命名,作为一种伟大编程语言的总称。
客户机可以对cobra服务器执行4个操作:publish,subscribe,read和write。publish和subscribe是群聊的两个核心操作。read和write是键值存储(如memcached)或python语句提供的典型操作。
- publish:将数据发送到频道,该频道将广播给订阅该频道的任何人
- subscribe:实时接收发送到频道的事件。
- write:记录一些数据(通过键寻址)
- read:检索数据
新闻
眼镜蛇正在积极开发中,查看changelog了解什么是烹饪。
安装
具有pip
pip install cobras
带Docker
docker pull bsergean/cobra
用于开发
git clone <url>
cd cobra
python3 -m venv venv
source venv/bin/activate
make dev
make test
用法
COBRA服务器和测试客户端
$ cobra
Usage: cobra [OPTIONS] COMMAND [ARGS]...
Cobra is a realtime messaging server using Python3, WebSockets and Redis
PubSub.
Options:
--version Show the version and exit.
--help Show this message and exit.
Commands:
admin Run admin commands.
health Health check
init Setup cobra
monitor Monitor cobra
publish Publish to a channel
run Run the cobra server
redis_subscribe Subscribe to a channel (with redis)
subscribe Subscribe to a channel
secret Generate secrets used for authentication...
要运行服务器,请使用cobra run
。您可以使用cobra health
对服务器运行运行状况检查。
cobra health --url 'ws://jeanserge.com/v2?appkey=_health' --secret A5a3BdEfbc6Df5AAFFcadE7F9Dd7F17E --role health
巴瓦德
bavarde是针对公共cobra服务器运行的聊天客户端。打开两个终端,运行下面的两个命令并开始键入。
$ bavarde client
...
$ bavarde client --username bob
...
设置
cobras init
需要运行一次才能在~/.cobra.yaml
中生成应用程序配置文件。该文件包含所有配置的角色、机密和应用程序。客户端将使用此数据进行身份验证。
要在生产环境中运行,您需要一个redis(version>;5)实例。以下是您可能需要调整的环境变量,用于连接到2个redis实例(用于scalabity),并绑定到0.0.0.0上,以便Internet可以看到您的实例。
- name: COBRA_HOST
value: 0.0.0.0
- name: COBRA_REDIS_URLS
value: redis://redis1;redis://redis2
# config can be a path to a file
- name: COBRA_APPS_CONFIG_PATH
value: /path/to/your/cobra.yaml
# config can be a blob of gziped + base64 data (if you do not want to mount volumes)
# Generate it with:
# `gzip -c ~/.cobra.yaml | base64`
- name: COBRA_APPS_CONFIG_CONTENT
value: BIGBLOGOFDATA
谢谢
如果没有其他令人惊叹的开源项目和技术,就不会有眼镜蛇。
- Python(和asyncio,杀手Python3的特征之一!)
- Redis,因特网上的瑞士军刀,它提供了一个非常可伸缩的发布/订阅功能,可以在保留消息的同时发送消息,并允许查找旧消息(参见[redis streams](https://redis.io/topics/streams-intro)。
- pythonwebsockets库,非常优雅地实现了WebSockets协议。