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 购以 ...
随机推荐
- Java学习:Lambda表达式
Lambda表达式 函数式编程思想概述---强调做什么,而不是以什么形式做 面向对象的思想: 做一件事情,找一个能解决这个的事情的对象,调用对象的方法,完成事情 函数式编程思想 只要能获取到结果,谁去 ...
- FusionInsight大数据开发---Hive应用开发
Hive应用开发 了解Hive的基本架构原理 掌握JDBC客户端开发流程 了解ODBC客户端的开发流程 了解python客户端的开发流程 了解Hcatalog/webHcat开发接口 掌握Hive开发 ...
- 浅浅的叙WPF之数据驱动与命令
之前一直开发Winfrom程序,由于近一段时间转开发Wpf程序,刚好拜读刘铁锰<深入浅出WPF>对此有一些理解,如有误导指出,还望斧正!!! 说道WPF数据驱动的编程思想,MVVM,是为W ...
- C#控制IIS动态添加删除网站
我的目的是在Winform程序里面,可以直接启动一个HTTP服务端,给下游客户连接使用. 查找相关技术,有两种方法: 1.使用C#动态添加网站应用到IIS中,借用IIS的管理能力来提供HTTP接口.本 ...
- python卸载重新安装,一键安装卸载前的所有安装的第三方插件
好多小可爱都有这样一个困扰,python有了一个大版本的更新,我也想更新,但是安装的好多第三方的库可怎么办呀,更新之后再去一个一个的安装,那可就烦死了. 在这里我来教大家如何快速去安装python更新 ...
- C# 调用JS Eval,高效率
/// <summary> /// 动态计算表达式 /// </summary> class JSCaller { /// <summary> /// 动态计算表达 ...
- HeRaNO's NOIP CSP Round Day 2 T1 building
考试的时候居然睡着了... T1的60分做法很明显,3^n枚举每个状态并进行验证 (考试剩十分钟结束的时候我开始打,,不到五分钟就写完了? 暴力(60分) #include<bits/stdc+ ...
- Mybatis源码解析(三) —— Mapper代理类的生成
Mybatis源码解析(三) -- Mapper代理类的生成 在本系列第一篇文章已经讲述过在Mybatis-Spring项目中,是通过 MapperFactoryBean 的 getObject( ...
- Linux环境下:vmware安装Windows报错误-缺少所需的CD/DVD驱动器设备驱动程序
解决方法:将硬盘格式从SCSI改为IDE. 方法如下: 右键点击你新建的虚拟机名,点击最下面的setting,看到左侧第二行是hard disk 了么,你那里肯定是SCSI的,选中它,点最下面的rem ...
- [摘录]flutter打包后无法访问接口
打开文件{{flutterPorject}}\android\app\src\main\AndroidManifest.xml这个文件增加权限信息: <uses-permission andro ...