实时通信平台: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后台去发送一个消息,这边就能看到打印的信息了
图像梯度计算的是图像变化的速度。对于图像的边缘部分,其灰度值变化较大,梯度值也较大;相反,对于图像中比较平滑的部分,其灰度值变化较小,相应的梯度值也较小。图像梯度计算需要求导数,但是图像梯度一般通过计算像素值的差来得到梯度的近似值(近似导数值)。本节主要介绍Sobel算子、Scharr算子、Laplacian算子和Canny算子的使用.
图标组件是展示图标的组件,但是再Flutter中,Icon组件是只是起一个展示效果,不能进行交互,如果要实现交互,就需要使用图标按钮IconButton组件。
网页扫描二维码库:Html5-Qrcode,官网地址:https://scanapp.org/html5-qrcode-docs/
《康熙王朝》是一部非常优秀的电视连续剧,陈道明演的康熙是我觉得最有帝王气魄,让人意犹未尽,本文主要记录一小段非常经典的对白。
快速生成表格
Electron页面跳转、浏览器打开链接和打开新窗口
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,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。