测试体验Centrifugo
今天尝试用 centrifugo 来做一个在聊天室,以前用workerman做过,相对来说 workerman的配置就显得复杂多了,需要自己搭建PHP环境,
而 centrifugo 就清爽多了,官网下载二进制单文件直接运行,得益于go语言,centrifugo 的性能应该是大于workerman的,
但也得提醒一下,从github上看centrifugo是 2018年底才开始的,目前还在快速更新中,稳定性有一定风险。
测试系统: Debian 9
下载二进制文件:
https://github.com/centrifugal/centrifugo/releases
添加执行权限
chmod a+x centrifugo
生成配置文件 config.json文件
./centrifugo genconfig
内容大致这样的
{
"secret": "16bfd798-4f9f-4362-98e8-d88cb4997db2",
"admin_password": "18d34296-f9c2-4c65-a04a-118cbe020481",
"admin_secret": "e6adffc9-e54f-41ef-a487-3b172ea962db",
"api_key": "3fe2e20a-af48-48d1-9aab-51ae88d92c5e"
}
启动 centrifugo
./centrifugo -c config.json
前台采用 centrifugo的js客户端,下载地址: https://github.com/centrifugal/centrifuge-js
通过文档得知,要链接到centrifugo服务器,需要一个jwt的token,打开 https://jwt.io/,准本生成一个测试用的jwtToken

PAYLOAD框框里面去掉 name和iat,只保留sub一项,不然连不上,我猜测是centrifugo 不支持
(文档里面确实写了支持exp,info的,实测不行)
VERIFY SIGNATURE 框框里面补充config.json文件里面的secret字段值
这个时候 左边 Encoded框框 里面的一串密文就是我们要用到的
嫌麻烦可以直接使用我生成好的两个(使用的前提是你的config.js secret字段要跟我的一样):
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxIn0.GvmVuP_7yADlqHk6fB7Tcq2V5EGY98PQw3EkX3DbBmQ
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyIn0.ZOIIW5dReDRHEWkBakTJn0-cn0JFL6MIcrkOtElevRk
为了接下来的测试方便,我先配置一下config文件的常用选项:
{
"admin": true, # 开启管理员后台
"posrt": 8000, # 端口
"debug": true, # 开启debug模式
"presence": true, # 开启系统状态信息
"history_size": 100, # 历史消息保存条数,0不保存
"history_lifetime": 600, # 历史消息保存秒数 0 保存
"secret": "16bfd798-4f9f-4362-98e8-d88cb4997db2",
"admin_password": "18d34296-f9c2-4c65-a04a-118cbe020481",
"admin_secret": "e6adffc9-e54f-41ef-a487-3b172ea962db",
"api_key": "3fe2e20a-af48-48d1-9aab-51ae88d92c5e",
"publish": true # 允许客户端直接发布消息到centrifugo通道中,不经过我们自己的服务器,方便没有后端的情况下测试
}
测试的html文件是这样的:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>socktest</title>
<script src="./centrifuge.min.js"></script>
</head>
<body>
<button onclick="init()">连接</button>
<button onclick="closeit()">关闭连接</button>
<button onclick="publish()">发送消息</button>
<button onclick="subscribe()">订阅频道</button>
<button onclick="unsubscribe()">取消订阅</button>
<button onclick="history()">拉取历史消息</button>
</body>
</html>
<script>
// js 代码
</script>
js代码:
function init() {
// 初始化 centrifugo 客户端
window.centrifuge = new Centrifuge('ws://localhost:8000/connection/websocket');
// 设置 token
centrifuge.setToken("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyIn0.ZOIIW5dReDRHEWkBakTJn0-cn0JFL6MIcrkOtElevRk");
// 监听连接事件
centrifuge.on('connect',function(context) {
console.log(context)
})
// 监听断开连接事件
centrifuge.on('disconnect', function(context) {
console.log(context)
});
// 启动连接
centrifuge.connect();
}
// 发布消息到通道
function publish () {
centrifuge.publish("news", {"input": "hello-publish"}).then(function(res) {
console.log(res);
}, function(err) {
console.log('publish error', err);
});
}
// 订阅频道
function subscribe() {
// 监听频道内的消息
var callbacks = {
"publish": function(message) {
console.log(message);
},
"join": function(message) {
console.log(message);
},
"leave": function(message) {
console.log(message);
},
"subscribe": function(context) {
console.log(context);
},
"error": function(errContext) {
console.log(err);
},
"unsubscribe": function(context) {
console.log(context);
}
}
window.subscription = centrifuge.subscribe("news", callbacks);
}
// 取消订阅
function unsubscribe() {
subscription.unsubscribe();
subscription.removeAllListeners();
}
// 查看历史消息
function history() {
subscription.history().then(function(message) {
console.log(message);
}, function(err) {
console.log(err);
});
}
// 关闭连接
function closeit() {
centrifuge.disconnect();
}
测试流程,开两个窗口,两个窗口的token不一样,打开调试工具的日志界面,

第一个窗口先点击连接,然后订阅频道,第二个窗口同样,
这个时候在第一个窗口点击发送消息,看另外一个窗口有没有接收到消息
centrifugo 提供了一个简易的后台面板:http://www.testserver.com:8000
测试过程中遇到一个问题:如果开启历史消息,开两个客户端测试时发现有个客户端无法发送消息,提示insufficient state(状态信息不足)
关闭历史消息的选项就没有问题
测试体验Centrifugo的更多相关文章
- 小米2S Mk6.0.1 [只能做测试体验,不能使用]
上几张高清图片.. 说明: 此版本只能做测试体验,不能做实际使用. 开发者: laser杨万荣 感谢: 秋叶随风ivan, m1cha 及 MoKee Open Source的各位开发者 下载地址:链 ...
- X-WAF简单测试体验
X-WAF 最近才关注到的一款云WAF,花了一些时间搭建了一个环境,并做了一些测试,感觉比较适合新手来练习WAF Bypass. X-WAF是一款适用中.小企业的云WAF系统,让中.小企业也可以非常方 ...
- 【阿里云产品公测】在ACE上部署WP测试体验
ACE服务其实已经有很多类似的服务提供商了,无论收费的还是免费的, 但是到现在为止还没有体验过,正好借着这次机会,来体验一下阿里云的ACE服务. ' !2NSv /IQ$[WR cx B ...
- NET分布式缓存Memcached测试体验
原文地址:http://onlyonewt.blog.sohu.com/160168896.html 一直在学习关注大访问量网站的缓存是如何实现,之前看过Memcached的资料,忙于没有时间来真正测 ...
- 骨灰级玩家体验带你测试体验天使纪元OL折扣端
刘亦菲代言吸引了我才进入游戏的(不知道有多少人和我一样)这个游戏没有一些骨灰级玩家带,真的很费时间费钱. 天使纪元5折折扣端(点击下载),其实是一个良心老平台,苹果,安卓.H5都支持的平台,采用最 ...
- 体验阿里云SSD云盘+ECS(I/O优化)的性能
阿里云推出SSD云盘+I/O优化的ECS已有一段时间,这个功能优化可以为ECS服务器与SSD云盘提供更好的网络能力.据阿里云官网介绍,SSD云盘最高提供20000次随机读写IOPS.256MB/S吞吐 ...
- 关于Docker在测试方面的应用
Docker 火了很长一段时间了,前段时间简单的学习和试玩了一下子,发现他对测试很有价值,觉得有必要再次深入研究. 这里标记一些较好的学习网址,用作参考: InfoQ上面有系列的文章: 深入浅出Doc ...
- 全球著名的渗透测试Linux简介
注:如发现链接无法打开,请尝试代理登录链接 1. Kali Linux Kali Linux是基于Debian的Linux发行版, 设计用于数字取证和渗透测试.由Offensive Security ...
- Google推出iOS功能性UI测试框架EarlGrey
经过了一段时间的酝酿后,Google很高兴地宣布了EarlGrey,一款针对于iOS的功能性UI测试框架.诸如YouTube.Google Calendar.Google Photos.Google ...
随机推荐
- 补习系列(17)-springboot mongodb 内嵌数据库
目录 简介 一.使用 flapdoodle.embed.mongo A. 引入依赖 B. 准备测试类 C. 完善配置 D. 启动测试 细节 二.使用Fongo A. 引入框架 B. 准备测试类 C.业 ...
- Scss预处理器的使用总结
变量 .嵌套.Mixin混合.function函数.插值 变量及文件导入 通过$定义变量 $white:#fff; $black:#000; 变量引用 .containner{ color:$blac ...
- DS控件库 Win7链接列表框效果1:右侧箭头
Win7链接列表框是仿Windos7开始菜单项开发的控件,同样支持右侧箭头,由于使用场合的不同,本控件中右键箭头不作为菜单扩展,而是通过事件触发式响应. 先上图 代码很简单,点击对右侧箭头区域点击的响 ...
- [TCP/IP] 网络层-简单查看路由表
使用抓包工具排除网络故障:1.如果一台计算机在网络上发广播包,广播的mac地址是全ff,就有可能堵塞2.使用抓包工具,检测广播包和多播包 网络畅通的条件:数据包有去有回1.路由器使用路由表找到目标网段 ...
- 编程心法 之什么是MVP What is MVP development?
Minimal Value product(feather), 比如说,如果是一个新的Photoshop,那么增加图片亮度就是一个MVP. 想要看到更多玮哥的学习笔记.考试复习资料.面试准备资料?想要 ...
- 备忘录模式 Memento 快照模式 标记Token模式 行为型 设计模式(二十二)
备忘录模式 Memento 沿着脚印,走过你来时的路,回到原点. 苦海翻起爱恨 在世间难逃避命运 相亲竟不可接近 或我应该相信是缘份 一首<一生所爱>触动了多少 ...
- MySQL索引初探
一.什么是索引? 帮助数据库系统实现高效获取数据的数据结构 索引可以帮助我们快速地定位到数据而不需要每次搜索的时候都遍历数据库中的每一行. 二.常见实现方式有哪些? 常见索引模型有三种:哈希表.有序数 ...
- Javascript之高级数组API的使用实例
JS代码中我们可以根据需求新建新的对象解决问题的同时,也有一些常用的内置对象供我们使用,我们称之为API,本篇文章只是对数组部分进行了练习. 例一:伪数组,不能修改长短的数组(所以没办法清零),可以修 ...
- CSS重要知识概述——Java Web从入门到精通第2章
一.CSS简单规则 CSS样式表包含3部分内容:选择符.属性和属性值 其中选择符包括基本的3种选择器: 1.标记选择器,如<a></a>标签等: 2.类别选择器,用class属 ...
- HTML之body标签中的相关标签补充
一 列表标签 列表标签分为三种. 1.无序列表<ul>,无序列表中的每一项是<li> 英文单词解释如下: a.ul:unordered list,“无序列表”的意思. b.li ...