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  语言无关的实时消息服务的更多相关文章

  1. NSQ:分布式的实时消息平台

    NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,代码托管在GitHub,其当前最新版本是0.3.1版.NSQ可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息,其 ...

  2. 实时消息平台NSQ的特性

    NSQ是GO语言开发的可用于大规模系统中的实时消息服务,但是和RabbitMQ等相比,它具有什么特色,什么场景下选择NSQ呢? NSQ的自身特色很明显,最主要的优势在如下三个方面: 1,性能.在多个著 ...

  3. Worktile中百万级实时消息推送服务的实现

    Worktile中百万级实时消息推送服务的实现 出自:http://blog.jobbole.com/81125/

  4. Go语言【项目】 websocket消息服务

    websocket消息服务 目的:搭建websocket服务,用浏览器与服务进行消息交互(写的第一个Go程序) 代码目录结构: 前端html页面: <!DOCTYPE html> < ...

  5. “一切都是消息”--MSF(消息服务框架)入门简介

    “一切都是消息”--这是MSF(消息服务框架)的设计哲学. MSF的名字是 Message Service Framework 的简称,中文名称:消息服务框架,它是PDF.NET框架的一部分. 1,M ...

  6. “一切都是消息”--iMSF(即时消息服务框架)入门简介

    “一切都是消息”--这是iMSF(即时消息服务框架)的设计哲学. MSF的名字是 Message Service Framework 的简称,由于目前框架主要功能在于处理即时(immediately) ...

  7. PHP Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样用php实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 ...

  8. Ruby Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样用Ruby实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推 ...

  9. 实时消息传输协议 RTMP(Real Time Messaging Protocol)

    实时消息传输协议(RTMP)最初是由 Macromedia 为互联网上 Flash player 和服务器之间传输音频.视频以及数据流而开发的一个私有协议.Adobe 收购 Macromedia 购以 ...

随机推荐

  1. Java学习:Lambda表达式

    Lambda表达式 函数式编程思想概述---强调做什么,而不是以什么形式做 面向对象的思想: 做一件事情,找一个能解决这个的事情的对象,调用对象的方法,完成事情 函数式编程思想 只要能获取到结果,谁去 ...

  2. FusionInsight大数据开发---Hive应用开发

    Hive应用开发 了解Hive的基本架构原理 掌握JDBC客户端开发流程 了解ODBC客户端的开发流程 了解python客户端的开发流程 了解Hcatalog/webHcat开发接口 掌握Hive开发 ...

  3. 浅浅的叙WPF之数据驱动与命令

    之前一直开发Winfrom程序,由于近一段时间转开发Wpf程序,刚好拜读刘铁锰<深入浅出WPF>对此有一些理解,如有误导指出,还望斧正!!! 说道WPF数据驱动的编程思想,MVVM,是为W ...

  4. C#控制IIS动态添加删除网站

    我的目的是在Winform程序里面,可以直接启动一个HTTP服务端,给下游客户连接使用. 查找相关技术,有两种方法: 1.使用C#动态添加网站应用到IIS中,借用IIS的管理能力来提供HTTP接口.本 ...

  5. python卸载重新安装,一键安装卸载前的所有安装的第三方插件

    好多小可爱都有这样一个困扰,python有了一个大版本的更新,我也想更新,但是安装的好多第三方的库可怎么办呀,更新之后再去一个一个的安装,那可就烦死了. 在这里我来教大家如何快速去安装python更新 ...

  6. C# 调用JS Eval,高效率

    /// <summary> /// 动态计算表达式 /// </summary> class JSCaller { /// <summary> /// 动态计算表达 ...

  7. HeRaNO's NOIP CSP Round Day 2 T1 building

    考试的时候居然睡着了... T1的60分做法很明显,3^n枚举每个状态并进行验证 (考试剩十分钟结束的时候我开始打,,不到五分钟就写完了? 暴力(60分) #include<bits/stdc+ ...

  8. Mybatis源码解析(三) —— Mapper代理类的生成

    Mybatis源码解析(三) -- Mapper代理类的生成   在本系列第一篇文章已经讲述过在Mybatis-Spring项目中,是通过 MapperFactoryBean 的 getObject( ...

  9. Linux环境下:vmware安装Windows报错误-缺少所需的CD/DVD驱动器设备驱动程序

    解决方法:将硬盘格式从SCSI改为IDE. 方法如下: 右键点击你新建的虚拟机名,点击最下面的setting,看到左侧第二行是hard disk 了么,你那里肯定是SCSI的,选中它,点最下面的rem ...

  10. [摘录]flutter打包后无法访问接口

    打开文件{{flutterPorject}}\android\app\src\main\AndroidManifest.xml这个文件增加权限信息: <uses-permission andro ...