Centrifugo 语言无关的实时消息服务
Centrifugo 语言无关的实时消息服务,基于golang编写,提供了websocket 以及sockjs 的兼容处理,使用上很简单
同时也支持基于redis的扩展,以下是一个简单的运行测试
环境准备
- docker-compose 文件
version: "3"
services:
centrifugal:
image: centrifugo/centrifugo
command: centrifugo -c config.json --engine=redis --redis_host=redis --redis_port=6379
ports:
- "8000:8000"
volumes:
- "./config:/centrifugo"
ulimits:
nproc: 65536
nofile:
soft: 65536
hard: 65536
redis:
image: redis
ports:
- "6379:6379"
- 配置文件
主要是关于运行时的参数,测试使用,实际需要调整
{
"secret": "05f0842d-c302-4036-a19f-6ac263b9f620",
"admin_password": "ca0e58bb-5fde-43b6-adce-b62392420ffc",
"admin_secret": "b10b2ab3-8e29-428b-85cb-42a32ba6ea57",
"api_key": "cbf46e80-3e00-4642-8f3a-369b8707304d",
"anonymous": true,
"publish": true,
"subscribe_to_publish": true,
"presence": true,
"debug":true,
"client_anonymous":true,
"join_leave": true,
"history_size": 10,
"history_lifetime": 300,
"history_recover": true,
"prometheus": true
}
nodejs web 集成
包含了jwt 生成以及以及简单的基于官方nodejs sdk 的demo(集成sockjs)
- package.json
{
"name": "web",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"dependencies": {
"centrifuge": "^2.2.1",
"jsonwebtoken": "^8.5.1",
"sockjs-client": "^1.3.0"
},
"scripts": {
"s":"node app.js"
}
}
- app.js
var Centrifuge = require("centrifuge")
var SockJS = require('sockjs-client');
var jwt = require('jsonwebtoken');
var token = jwt.sign({ sub: 'dalongdemo'}, '05f0842d-c302-4036-a19f-6ac263b9f620');
var centrifuge = new Centrifuge("http://localhost:8000/connection/sockjs", {
sockjs: SockJS
})
centrifuge.setToken(token)
centrifuge.subscribe("news", function(message) {
console.log(message);
});
centrifuge.connect();
运行&&测试
- 启动服务
docker-compose up -d
- 启动nodejs demo 应用
cd web
yarn
yarn s
- 通过api 发布消息
curl -X POST \
http://localhost:8000/api \
-H 'Authorization: apikey cbf46e80-3e00-4642-8f3a-369b8707304d' \
-d '{
"method": "publish",
"params": {
"channel": "news",
"data": {
"text": "dalongrong"
}
}
}'
- 效果

- redis key

说明
Centrifugo 还是比较方便的,使用起来也比较简单,实际上类似的工具还是很多的,nchan。。。 都挺不错的,同时官方文档还是不错的
内容比较详细
参考资料
https://github.com/centrifugal/centrifugo
https://nchan.io/
https://github.com/rongfengliang/centrifugo-docker-compose
Centrifugo 语言无关的实时消息服务的更多相关文章
- NSQ:分布式的实时消息平台
NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,代码托管在GitHub,其当前最新版本是0.3.1版.NSQ可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息,其 ...
- 实时消息平台NSQ的特性
NSQ是GO语言开发的可用于大规模系统中的实时消息服务,但是和RabbitMQ等相比,它具有什么特色,什么场景下选择NSQ呢? NSQ的自身特色很明显,最主要的优势在如下三个方面: 1,性能.在多个著 ...
- Worktile中百万级实时消息推送服务的实现
Worktile中百万级实时消息推送服务的实现 出自:http://blog.jobbole.com/81125/
- Go语言【项目】 websocket消息服务
websocket消息服务 目的:搭建websocket服务,用浏览器与服务进行消息交互(写的第一个Go程序) 代码目录结构: 前端html页面: <!DOCTYPE html> < ...
- “一切都是消息”--MSF(消息服务框架)入门简介
“一切都是消息”--这是MSF(消息服务框架)的设计哲学. MSF的名字是 Message Service Framework 的简称,中文名称:消息服务框架,它是PDF.NET框架的一部分. 1,M ...
- “一切都是消息”--iMSF(即时消息服务框架)入门简介
“一切都是消息”--这是iMSF(即时消息服务框架)的设计哲学. MSF的名字是 Message Service Framework 的简称,由于目前框架主要功能在于处理即时(immediately) ...
- PHP Web实时消息后台服务器推送技术---GoEasy
越来越多的项目需要用到实时消息的推送与接收,怎样用php实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 ...
- Ruby Web实时消息后台服务器推送技术---GoEasy
越来越多的项目需要用到实时消息的推送与接收,怎样用Ruby实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推 ...
- 实时消息传输协议 RTMP(Real Time Messaging Protocol)
实时消息传输协议(RTMP)最初是由 Macromedia 为互联网上 Flash player 和服务器之间传输音频.视频以及数据流而开发的一个私有协议.Adobe 收购 Macromedia 购以 ...
随机推荐
- iphone如何安装mitmproxy的pem文件(当iphone无法使用邮箱时)
背景描述: 我要安装mitmproxy描述文件 mitmproxy-ca-cert.pem , 说是用iphone自带的邮箱接收然后安装即可,但悲剧的邮箱坏了[提示:无法连接服务器],查了不少方法都无 ...
- 【Linux】CentOS7 打开关闭防火墙及端口
一.centos7版本对防火墙进行加强,不再使用原来的iptables,启用firewalld1.firewalld的基本使用启动: systemctl start firewalld查状态:syst ...
- PHP7.3.0+弃用FILTER_FLAG_SCHEME_REQUIRED的解决办法
今天本地调用一个接口报错了: filter_var(): explicit use of FILTER_FLAG_SCHEME_REQUIRED and FILTER_FLAG_HOST_REQUIR ...
- .NET Core MD5加密 32位和16位
public class MD5Help { //此代码示例通过创建哈希字符串适用于任何 MD5 哈希函数 (在任何平台) 上创建 32 个字符的十六进制格式哈希字符串官网案例改编 /// <s ...
- jsGrid使用入门
jsGrid使用入门 原创蓝天上的一朵云 本文链接:https://blog.csdn.net/u012846041/article/details/82735811 jsGrid资源地址: http ...
- 使用MHA实现MySQL主从复制高可用
一.MHA简介 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司的youshimaton(现就职于Fac ...
- 编写可维护的JavaScript-随笔(七)
将配置数据从代码中分离出来 代码中有些数据有修改的可能,如果放在函数中的话后期修改的时候会带来一些不必要的风险 需要将配置数据从代码中抽取出来,如果配置数据多的话可以放入一个对象中,然后修改抽取出来的 ...
- 单词diamaund钻石diamaund英文
Diamond Di"a*mond (?; 277), n. [OE. diamaund, the hardest iron, steel, diamond, Gr. . Perh. the ...
- 排序算法的c++实现——归并排序
归并排序是典型分治思想的代表——首先把原问题分解为两个或多个子问题,然后求解子问题的解,最后使用子问题的解来构造出原问题的解. 对于归并排序,给定一个待排序的数组,首先把该数组划分为两个子数组,然后对 ...
- warning警告问题解决1
warning警告问题, 这时可以不去管它, 但如果想解决, 可以这样做: c:\python\lib\site-packages\locust\core.py:17: MonkeyPatchWarn ...