Centrifugo  语言无关的实时消息服务

摘要:
基于golang编写的独立于离心机语言的实时消息服务提供了websockets和sockjs的兼容处理。它使用简单,还支持基于Redis的扩展。以下是一个简单的运行测试环境,用于准备docker compose文件版本:“3”services:central:image:central/central命令:central config。j

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"
        }
    }
}'
 
  • 效果

Centrifugo  语言无关的实时消息服务第1张

  • redis key

Centrifugo  语言无关的实时消息服务第2张

说明

Centrifugo 还是比较方便的,使用起来也比较简单,实际上类似的工具还是很多的,nchan。。。 都挺不错的,同时官方文档还是不错的
内容比较详细

参考资料

https://github.com/centrifugal/centrifugo
https://nchan.io/
https://github.com/rongfengliang/centrifugo-docker-compose

免责声明:文章转载自《Centrifugo  语言无关的实时消息服务》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇小程序多业务线融合【完整分包业务接入】Map、List、Set在Java中的各种遍历方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

openwrt ubus (OpenWrt micro bus 架构)

为了在OpenWrt中提供守护进程和应用程序间的通讯,开发了ubus项目工程。它包含了守护进程、库以及一些额外的帮助程序。 核心部分是ubusd守护进程,它提供了其他守护进程将自己注册以及发送消息的接口。因为这个,接口通过使用Unix socket来实现,并使用TLV(type-length-value)消息。 为了简化软件的开发,可以使用已有的libub...

Java高并发,如何解决,什么方式解决

  对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了。而并发问题是绝大部分的程序员头疼的问题,但话又说回来了,既然逃避不掉, 那我们就坦然面对吧~今天就让我们一起来研究一下常见的并发和同步吧。   为了更好的理解并发和同步,我们需要先明白两个重要的概念:同步和异步    1、同步和异步的区别和联系    所谓同步,可以...

RabbitMQ生产者发送消息确认

在使用RabbitMQ的时候,可以通过消息的持久化操作来解决因为服务器的异常崩溃而导致的消息丢失,除此之外,我们还会遇到一个问题,当消息的生产者将消息发送出去以后,消息到底有没有到达服务器呢?如果不进行特殊的配置,默认情况下发送消息的操作是不会返回任何消息给生产者的,也就是默认情况下是不知道消息有没有正确地到达服务器。如果在消息到达服务器之前已经丢失,持久...

在Ubuntu 18.04系统上安装Pydio Cells详细图文教程

前言   基于云的协作工具Pydio cell提供了一系列灵活的特性,包括应用内消息传递、文件共享和版本控制。下面逐步介绍安装过程。 Pydio cell最初是一个简单的基于云的文件共享系统,但经过升级后现在提供了更大的灵活性,用户可以使用应用内消息传递、文件共享、版本控制、移动应用等等。创建顶级的个人文件夹来组织数据,同时创建协作单元,以便与其他用户共享...

web中打开word为什么老是提示无法打开宏储存?

是因为用户没有在服务器端运行Word的权限,应在服务器端做如下操作:1.开始--运行--dcomcnfg--Microsoft Word 文档--属性--身份标识--交互式用户否则会出现“消息筛选器显示应用程序正在使用中”的错误2.开始--运行--dcomcnfg--Microsoft Word 文档--属性--安全性--使用自定义访问权限--添加Ever...

关于HTTP协议头域详解

HTTP1.1  请求头:消息头   Accept:text/html,image/*  告诉服务器,客户机支持的数据类型 Accept-Charset:ISO-8859-1  告诉服务器,客户机采用的编码   Accept-EnCoding:gzip,compress 告诉服务器,客户机支持的数据压缩格式 Accept-Language:en   客户机...