实时通信平台: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页面跳转、浏览器打开链接和打开新窗口
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。
有使用需要使用GD库,网上很多文章都是记录通过下载一堆文件编译安装,其实在PHP的源码包中,已经有gd的编译源码,只需要简单的执行几个命令就可以安装好gd扩展。
MD5算法一般用于检查文件完整性,尤其常用于检测在(网络)文件传输、拷贝、磁盘错误或其他无恶意涉入的情况下文件的正确性。MD5全称报文摘要算法(Message-DigestAlgorithm 5)[RFC 1321],该算法对任意长度的信息进行逐位计算,产生一个二进制长度128位(十六进制长度32位)的校验和(或称“指纹”,“报文摘要”),不同的文件内容生成相同的报文摘要的概率是极其小的。
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问题
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。