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

最新文章

  1. javascript中需要自行定义的函数
  2. [LeetCode] Longest Consecutive Sequence 求最长连续序列
  3. 有关JVM内存
  4. 使用radioGroup的时候,每个radioButton的状态选择器要使用 state_checked=""属性,不能使用selected
  5. 20150825 C# 调用带参数的存储过程 模板
  6. tomcat如何简单调优
  7. Linux ps同时查找多个进程
  8. 局域网内Linux服务器时间同步
  9. 一步一步学android控件(之二十五)—— SeekBar
  10. Impala与Hive的比較
  11. 对于C++中const & T operator= 的一点思考
  12. Ubuntu 16.04安装配置Samba服务
  13. 自动化利器-YUM仓库搭建实战
  14. 【OCR技术系列之一】字符识别技术总览
  15. docker镜像的常用操作
  16. Setup ActorComponents
  17. Javascript 面向对象编程2:构造函数的继承
  18. Java中的代理机制
  19. android studio 统一管理版本号配置
  20. python连接redis

热门文章

  1. Java学习:集合的使用与数组的区别
  2. 使用php函数防止SQL注入方法
  3. 怎样调节Eclipse中的字体大小?
  4. 千万不要用window自带文本编辑器编辑配置文件或者代码
  5. 《CI/CD 流程以及原理说明》
  6. 前端项目中公共方法汇总utils.js
  7. python小项目之文本编辑器
  8. mac下比较好用的svn软件,SVN客户端CornerStone 2.7.10 破解版
  9. go frame框架,关闭启动时打印的路由列表已经debug信息
  10. [FreeRTOS].FreeRTOS CortexM3 M4中断优先级设置总结