centrifuge5.0.1版本请求websocket实例

目录

一、安转

二、快速开始 

三、实例开始


centrifuge提供了一个客户端,可使用纯 WebSocket 或一种替代传输(HTTP 流、SSE/EventSource、实验性 WebTransport)从 Web 浏览器、ReactNative 或 NodeJS 环境连接到Centrifugo或任何基于 Centrifuge 的服务器。

一、安转

centrifuge可以通过pnpm安装:

pnpm add centrifuge

然后在你的项目中:

import { Centrifuge } from 'centrifuge';
在浏览器中,您可以从CDN导入SDK(替换5.0.0为您要使用的具体版本号,请参阅releases):
<script src="https://unpkg.com/centrifuge@5.0.0/dist/centrifuge.js"></script>
另请参阅cdnjs 上的 centcent-js。请注意,centrifuge-js浏览器构建目标ES6默认情况下,库仅适用于 JSON,如果您想发送二进制有效负载,请转到Protobuf 支持部分以了解如何导入具有 Protobuf 支持的客户端。

二、快速开始 

基本用法示例可能如下所示:

// Use WebSocket transport endpoint.
const centrifuge = new Centrifuge('ws://centrifuge.example.com/connection/websocket');// Allocate Subscription to a channel.
const sub = centrifuge.newSubscription('news');// React on `news` channel real-time publications.
sub.on('publication', function(ctx) {console.log(ctx.data);
});// Trigger subscribe process.
sub.subscribe();// Trigger actual connection establishement.
centrifuge.connect();

请注意,我们显式调用.connect()方法来启动与服务器的连接建立,以及.subscribe()将订阅移动到状态的方法(在与服务器建立连接后subsribing应立即转换为状态)。和调用subscribed的顺序在这里实际上并不重要。.connect().subscribe

Centrifugeobject 和Subscriptionobject 都是EventEmitter的实例。下面我们将详细描述可以曝光的事件。

三、实例开始

<!DOCTYPE html>
<html lang="cn"><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.js"></script></head><body><button onclick="handleSubscribeWebsocket()">订阅</button><button onclick="unsubscribe()">取消订阅</button><button onclick="presence()">获取订阅端的信息</button><button onclick="history()">拉取历史记录</button><button onclick="closeit()">断开连接</button><a href="https://github.com/centrifugal/centrifuge-js" target="_blank">参见官网</a></body>
</html>
<script>console.log(Centrifuge);// Subscribe to the channellet subscription, centrifuge;const statistics = 'statistics';const handleGetWebsocket = async () => {try {const res = await fetch('http://192.168.1.192:7089/api/v1/websocket_token');const data = await res.json();console.log('🚀 ~ file: hello.html:23 ~ handleGetWebsocket ~ data:',data);return data.data;} catch (error) {}};async function handleSubscriptionToken(path, token) {try {// ctx argument has a channel.const res = await fetch(`http://192.168.1.192:7089/api/v1/websocket_token/${path}`,{method: 'Get',headers: new Headers({'Content-Type': 'application/json',Authorization: token})});const data = await res.json();return data.data.token;} catch (error) {}}const handleSubscribeWebsocket = async () => {const socketData = await handleGetWebsocket();console.log('🚀 ~ file: hello.html:58 ~ handleSubscribeWebsocket ~ socketData:',socketData);centrifuge = new Centrifuge(socketData.url, {token: socketData.token});centrifuge.on('connecting', function (ctx) {console.log('🚀 ~ file: HomeCounter.tsx:52 ~ ctx:', ctx);// do whatever you need in case of connecting to a server});centrifuge.on('connected', function (ctx) {console.log('🚀 ~ file: HomeCounter.tsx:45 ~ ctx:', ctx);// now client connected to Centrifugo and authenticated.});centrifuge.on('error', function (ctx) {console.log(ctx);});centrifuge.on('disconnected', function (ctx) {console.log('🚀 ~ file: hello.html:78 ~ ctx:', ctx);// do whatever you need in case of disconnect from server});const getToken = async () => {const token = await handleSubscriptionToken(statistics, socketData.token);return token;};const subToken = await getToken();console.log('🚀 ~ file: hello.html:69 ~ handleSubscribeWebsocket ~ subToken:',subToken);subscription = centrifuge.newSubscription(statistics, {token: subToken,getToken: getToken});subscription.on('publication', function (ctx) {console.log('🚀 ~ file: HomeCounter.tsx:41 ~ ctx:', ctx);// handle new Publication data coming from channel "news".console.log(ctx.data);});subscription.on('unsubscribed', function (ctx) {console.log(ctx);});subscription.on('error', function (ctx) {console.log(ctx);});subscription.subscribe();centrifuge.connect();};// unsubscribefunction unsubscribe() {subscription.unsubscribe();subscription.removeAllListeners();}function presence() {subscription.presence().then(function (ctx) {console.log(ctx.clients);},function (err) {// presence call failed with error});}// Viewing Historical Messagesfunction history() {subscription.history({ limit: 100 }).then(function (message) {console.log(message);},function (err) {console.log(err);});}// Close the connectionfunction closeit() {centrifuge.disconnect();}
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/585940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WorkPlus局域网即时通讯软件的领航者,连接高效协作的利器

在快速发展的商业环境中&#xff0c;高效的内部沟通和协作对于企业的成功至关重要。而局域网即时通讯软件则成为实现内部高效沟通的必备工具。作为一款领航者级别的局域网即时通讯软件&#xff0c;WorkPlus通过卓越的性能和创新的技术&#xff0c;成为了众多企业的首选之一。 W…

ggplot2 | line plot 分组及均值线:聚类后的表达变化趋势图

1. 效果图 2. 预处理及绘图 # 输入数据 > head(dat)Species cid variable value 1 setosa 1 Sepal.Length 5.1 2 setosa 2 Sepal.Length 4.9 3 setosa 3 Sepal.Length 4.7 4 setosa 4 Sepal.Length 4.6 5 setosa 5 Sepal.Length 5.0 6 setos…

selenium模块有哪些用途?

Selenium模块是一个用于Web应用程序测试的模块&#xff0c;具有多种示例用法。以下是一些示例&#xff1a; 1.打开网页并执行一些基本操作&#xff0c;如点击按钮、输入文本等。 定位网页元素并执行操作&#xff0c;例如使用 find_element 方法查找单个元素&#xff0c;使用 f…

2023第三届中国高校大数据挑战赛B题代码

任务已完成&#xff0c;聚类效果很好&#xff08;主要在于数据的处理以及特征工程&#xff09;, 需代码si&#xff0c;yuer有限先到先得。

Git 使用规范:起名字、提交描述的最佳实践

1. 推荐写法&#xff08;本人常用&#xff09; Git 仓库命令规则&#xff1a; 前端&#xff1a;系统名-简单描述-front后端&#xff1a;系统名-简单描述-server Git 提交描述&#xff1a; docs(changelog): update change log to beta.5其中&#xff1a; ● docs 则对应修改…

深度学习 | 基本循环神经网络

1、序列建模 1.1、序列数据 序列数据 —— 时间 不同时间上收集到的数据&#xff0c;描述现象随时间变化的情况。 序列数据 —— 文本 由一串有序的文本组成的序列&#xff0c;需要进行分词。 序列数据 —— 图像 有序图像组成的序列&#xff0c;后一帧图像可能会受前一帧的影响…

Linux 服务器安全策略技巧:使用容器进行应用程序隔离

Linux 服务器安全策略技巧:使用容器进行应用程序隔离 什么是容器? 容器是一种虚拟化技术,用于隔离应用程序和其依赖的运行环境。与传统的虚拟机相比,容器更加轻量级,启动速度更快,并且可以在不同的操作系统上运行。容器使用操作系统级别的虚拟化来实现隔离,每个容器都…

09.kubernetes 部署calico / flannel网络插件

脚本中实现了 calico 和 flannel 这两种主流的网络插件,选择其中一种部署即可 1、calico calico架构 Calico是一个三层的虚拟网络解决方案,它把每个节点都当作虚拟路由器(vRouter),并把每个节点上的Pod都当作是节点路由器后的一个终端设备并为其分配一个IP地址。各节点…

TCP/IP的五层网络模型

目录 封装&#xff08;打包快递&#xff09; 6.1应用层 6.2传输层 6.3网络层 6.4数据链路层 6.5物理层 分用&#xff08;拆快递&#xff09; 6.5物理层 6.4数据链路层 6.3网络层 6.2传输层 6.1应用层 封装&#xff08;打包快递&#xff09; 6.1应用层 此时做的数据…

Xshell——Windows将本地文件上传到Linux服务器

1、scp命令 scp是基于ssh的网络文件传输命令&#xff0c;可以将本地文件或文件夹直接上传到服务器指定位置。命令格式&#xff1a; 上传文件 scp -P port filepath usernameip:TargetPath 上传文件夹 scp -r -P port filepath usernameip:TargetPath -P port&#xff1a;用于指…

java中如何使用elasticsearch—RestClient操作文档(CRUD)

目录 一、案例分析 二、Java代码中操作文档 2.1 初始化JavaRestClient 2.2 添加数据到索引库 2.3 根据id查询数据 2.4 根据id修改数据 2.4 删除操作 三、java代码对文档进行操作的基本步骤 一、案例分析 去数据库查询酒店数据&#xff0c;导入到hotel索引库&#xff0…

普通人如何月入过万?2024普通人创业适合干什么?

如果你的月收入不到1万块&#xff0c;也从来没有体验过一天就赚1万块是什么感觉的话&#xff0c;你还想创业&#xff1f;你如果想通过创业逆天改命&#xff0c;麻烦你一定要看完这篇文章。 普通人你要是想赚钱&#xff0c;一定要去赚那种能看得见的钱。 什么叫看得见的钱&…

Linux上管理不同版本的 JDK

当在 Linux 上管理不同版本的 JDK 时&#xff0c;使用 yum 和 dnf 可以方便地安装和切换不同的 JDK 版本。本文将介绍如何通过这两个包管理工具安装 JDK 1.8 和 JDK 11&#xff0c;并利用软连接动态关联这些版本。 安装 JDK 1.8 和 JDK 11 使用 yum 安装 JDK 1.8 打开终端并…

第十二章 文档对象模型(DOM)的介绍和使用

文章目录 一、DOM介绍二、节点选择器三、属性操作四、样式操作五、尺寸类属性的快速获取六、标签操作八、练习 一、DOM介绍 DOM&#xff1a;文档对象模型&#xff0c;document&#xff0c;提供了网页的相关操作。 document是window的子对象之一&#xff0c;但是DOM不属于BOM D…

在Linux上搭建Maven仓库的实战教程

引言 在Java开发中&#xff0c;Maven作为项目构建和依赖管理的重要工具&#xff0c;其仓库的搭建至关重要。本文将手把手教你如何在Linux系统上安装并配置Nexus Repository Manager 3&#xff08;简称Nexus 3&#xff09;&#xff0c;从而创建一个私有的Maven仓库。 步骤一&a…

Solidworks学习笔记

本内容为solidworks的学习笔记&#xff0c;根据自己的理解进行记录&#xff0c;部分可能不正确&#xff0c;请自行判断。 学习视频参考&#xff1a;【SolidWorks2018视频教程 SW2018中文版软件基础教学知识 SolidWorks自学教程软件操作教程 sw视频教程 零基础教程 视频教程】 h…

69内网安全-域横向CobaltStrikeSPNRDP

这节课主要讲spn和rdp协议&#xff0c; 案例一域横向移动RDP传递-Mimikatz rdp是什么&#xff0c;rdp是一个远程的链接协议&#xff0c;在linux上面就是ssh协议&#xff0c; 我们在前期信息收集的时候&#xff0c;得到一些hash值和明文密码可以进行一些相关协议的链接的&am…

【AI导师】利用Coding Agent完成AIGC编程

利用Coding Agent完成AIGC编程 一、前言二、Coding Agent三、1024code四、AI导师README项目初版功能定义代码结构设计方案函数方法设计方案迭代记录 一、前言 AI产品的发展确实在过去两年年中取得了显著进展&#xff0c;尤其是在编程领域。一开始&#xff0c;ChatGPT和类似的语…

每日一练:LeeCode-347. 前 K 个高频元素(中) - 【优先级队列】

本文是力扣LeeCode-347. 前 K 个高频元素 学习与理解过程&#xff0c;本文仅做学习之用&#xff0c;对本题感兴趣的小伙伴可以出门左拐LeeCode。 给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 输…

python统计学-单个总体样本容量的确定

简介 样本容量是指从总体中抽取的样本数量。单个总体样本容量的确定是指在给定的置信水平和误差范围内&#xff0c;确定从总体中抽取的样本数量。样本容量的确定有多种方法&#xff0c;常用的方法有&#xff1a; 正态分布法&#xff1a;如果总体服从正态分布&#xff0c;则可以…