实时通信平台:Centrifugo
简介Centrifugo是一个用Golang实现的基于Websocket或者SockJS的实时通信平台。它与语言无关,可以与任何语言编写的应用程序后端(Python,Ruby,Perl,PHP,Javascript,Java,Objective-C等)结合使用。
Centrifugo是一个用Golang实现的基于Websocket或者SockJS的实时通信平台。它与语言无关,可以与任何语言编写的应用程序后端(Python,Ruby,Perl,PHP,Javascript,Java,Objective-C等)结合使用。
Centrifugo特点
- 快速的处理数千个并发连接.
- 轻松地与现有应用程序集成 - 不需要重写后端代码来引入实时事件
- 应用程序后端通过HTTP API和centrifugo进行通信(在通道中发布消息等).拥有Python,Ruby,PHP,Go,NodeJS等语言的API客户端.
- Javascript客户端通过SockJS或纯Websocket协议从Web浏览器进行连接。iOS和Android客户端通过Websocket连接
- 使用Redis和Redis Sentinel扩展到多台机器,实现高可用性,一致的散列分片。
- SHA-256基于HMAC的连接认证和专用信道授权
- 不同类型的渠道 - 私人,用户限制,客户端限制的渠道
- 通过命名空间灵活配置通道
- 频道存在信息(显示频道中的所有活动客户端)
- 频道的历史信息(最后发送到频道的讯息)
- 加入/离开频道事件(客户端在线/离线)
- 网络断开后恢复丢失的消息
- 内置管理Web界面
- 可以用作WebRTC信令服务器
- 准备部署(docker映像,RPM / DEB包,Nginx配置,自动让我们加密TLS证书)
- MIT许可证
需要更多了解Centrifugo的相关内容,可以进入https://centrifugal.github.io/centrifugo/进行查看。
一、Centrifugo服务搭建
1、下载发布的包
下载地址:https://github.com/centrifugal/centrifugo/releases
[root@localhost ~]# wget https://github.com/centrifugal/centrifugo/releases/download/v2.2.1/centrifugo_2.2.1_linux_amd64.tar.gz
2、解压压缩包到指定目录
[root@localhost apps]# mkdir -p /apps/centrifugo [root@localhost ~]# tar -zxf centrifugo_2.2.1_linux_amd64.tar.gz -C /apps/centrifugo/ [root@localhost ~]# cd /apps/centrifugo/ [root@localhost centrifugo]# ll total 16524 -rwxrwxr-x. 1 2000 2000 16861984 Apr 15 14:40 centrifugo -rw-rw-r--. 1 2000 2000 47426 Apr 15 14:38 CHANGELOG.md -rw-rw-r--. 1 2000 2000 1102 Apr 15 14:38 LICENSE -rw-rw-r--. 1 2000 2000 3681 Apr 15 14:38 README.md
3、生成配置文件
[root@localhost centrifugo]# ./centrifugo genconfig [root@localhost centrifugo]# ll total 16528 -rwxrwxr-x. 1 2000 2000 16861984 Apr 15 14:40 centrifugo -rw-rw-r--. 1 2000 2000 47426 Apr 15 14:38 CHANGELOG.md -rw-r--r--. 1 root root 226 May 17 19:58 config.json -rw-rw-r--. 1 2000 2000 1102 Apr 15 14:38 LICENSE -rw-rw-r--. 1 2000 2000 3681 Apr 15 14:38 README.md
执行命令后,生成了一个config.json的配置文件,包含了基本的配置信息
[root@localhost centrifugo]# cat config.json { "secret": "54a2ff0f-006e-457c-9197-41fa908fa446", "admin_password": "ad581503-f8d7-4501-98b3-7096e12a16c0", "admin_secret": "e3cd5036-c80a-4586-a40a-ee7be52a6129", "api_key": "24d498f1-d42b-45ef-899e-507534f4d55d" }
4、启动Centrifugo服务
[root@localhost centrifugo]# ./centrifugo --config=config.json 2019-05-17T20:01:59-04:00 |INFO| starting Centrifugo 2.2.1 (go1.12.4) 2019-05-17T20:01:59-04:00 |INFO| config path: /apps/centrifugo/config.json 2019-05-17T20:01:59-04:00 |INFO| pid: 30421 2019-05-17T20:01:59-04:00 |INFO| engine: Memory 2019-05-17T20:01:59-04:00 |INFO| gomaxprocs: 1 2019-05-17T20:01:59-04:00 |INFO| serving websocket, SockJS, API endpoints on :8000
如果要启动WEB管理服务,需要在命令后面加上–admin,如
[root@localhost centrifugo]# ./centrifugo --config=config.json --admin 2019-05-17T20:02:31-04:00 |INFO| starting Centrifugo 2.2.1 (go1.12.4) 2019-05-17T20:02:31-04:00 |INFO| config path: /apps/centrifugo/config.json 2019-05-17T20:02:31-04:00 |INFO| pid: 30429 2019-05-17T20:02:31-04:00 |INFO| engine: Memory 2019-05-17T20:02:31-04:00 |INFO| gomaxprocs: 1 2019-05-17T20:02:31-04:00 |INFO| serving websocket, SockJS, API, admin endpoints on :8000
启动后可以通过IP和端口访问:http://192.168.71.109:8000,密码是配置文件中的admin_password。通过后台可以观看所有节点信息,节点中频道、客户端和用户信息。
其他相关配置参数请参考官方文档。
二、Centrifugo客户端
现在Centrifugo已经支持JS、Golang、ISO、Android、Dart、Flutter、Java等客户端。
这里我们使用JS为例,首先需要去https://github.com/centrifugal/centrifuge-js下载dist中的库。
然后新建一个index.html页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript" src="dist/centrifuge.js"></script>
</head>
<body>
<script type="text/javascript">
var centrifuge = new Centrifuge('ws://192.168.71.109:8000/connection/websocket');
centrifuge.setToken("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI0MiIsImNoYW5uZWwiOiIkbG9jYWxkb21haW5fODAwMCJ9.A7cLUfP3T-4Der1L0yYfCB0iuBmk4RorbKewPgU-99s");
centrifuge.subscribe("news", function(message) {
console.log('abad',message);
}); centrifuge.connect();
</script>
</body>
</html>
上面生成Token的Python代码:
import jwt
token = jwt.encode({"sub": "42", "data": "存放数据"}, "54a2ff0f-006e-457c-9197-41fa908fa446").decode()
# sub:表示以一个用户的ID,
# data:存放任何数据
# 54a2ff0f-006e-457c-9197-41fa908fa446是配置文件中的secret
print(token)
运行文件,然后在Centrifugo后台去发送一个消息,这边就能看到打印的信息了
如果没有热更新,那么每次修改代码后都需要去重新运行一遍项目,这样显得非常麻烦,本文主要介绍如何使用功能electron-reloader。
《血色湘西》瞿先生临死前的独白,振奋人心。
《是妈妈是女儿》聚焦母女间未曾言明的爱意,以书信对话的形式呈现出各自的内心独白,表达彼此的牵挂。黄绮珊与希林娜依·高用跨越时空、打开心扉、深情对唱的形式,将天下母女爱的寄语化作心灵的倾诉。黄绮珊的每一句话,每一个字都演绎出了妈妈对女儿的爱,而希林依娜·高把女儿对妈妈的爱由不理解到理解再到感恩演绎得淋漓尽致。
如何通过查询语句来查询某个数据的排名,本文主要介绍MySql和MongoDB两种数据库的查询方式来进行排名。
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。
快速生成表格
Docker编译镜像出现:fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.2c4ac24e.tar.gz: No such file or directory问题
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。