Gin+WebSocket实战——在线聊天室WebSocketDemo详细使用教程

文章目录

    • 仓库地址
    • 项目简介
    • 如何使用

仓库地址

Github:https://github.com/palp1tate/WebsocketDemo
欢迎star!😎

项目简介

利用 Gin+WebSocket 实现的在线聊天室Demo项目,支持加入/离开聊天室广播、给其他用户发送消息等。

如何使用

进入项目根目录,执行命令go run .命令,结果如下:

image-20240425142642036

可以看到们的HTTP服务已经启动成功并运行在了8080端口上。

接下来打开接口调试软件Apifox,也可以使用在线的 WebSocket 接口调试网站。

进入Apifox,新建WebSocket接口:

image-20240425143032300

输入query参数user,这个参数为必选,表示是谁加入了聊天室。

image-20240425144233434

输入接口地址ws://127.0.0.1:8080/chat,点击连接:

image-20240425144429944

结果如下:

image-20240425144844987

新建多个WebSocket接口,可以看到一有新成员加入,其他成员都会收到广播通知:

image-20240425144942473

image-20240425145118970

image-20240425145139218

当有人离开聊天室时,其他人也会受到下线通知:

20240425145248_rec_-convert

接下来我们将该用户重新上线,同时演示如何给其他成员发消息,需要将发送的消息格式设置为json

image-20240425145621983

消息的正确格式如下:

{"toUser": "赵丽颖","content": "你真棒"
}

toUser代表给谁发消息,content代表发消息的内容。这两者有任何一者为空,均会收到提示内容缺失的消息。

image-20240425145916418

点击发送,可以看到收信人成功收到消息:

20240425150210_rec_-convert

如果该接收人不在线,发信人也会收到相应的提示信息:

image-20240425150453002

WebSocketDemo算是一个比较经典的用于学习WebSocket的实战项目了吧,所有的介绍就到这里,欢迎 star!

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

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

相关文章

STL——List常用接口模拟实现及其使用

认识list list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素…

【C++】抽象类 与 C++

基础 C中没有抽象类的概念C中通过纯虚函数实现抽象类纯虚函数只是定义原型的成员函数一个类中存在纯虚函数就成为了抽象类 纯虚函数语法 class Shape {public:virtual double area() 0;// 0 用于告诉编译器当前是声明纯虚函数,因此不需要定义函数体 };抽象类与纯虚…

系统思考—心智模式

如果你总是做你过去一直做的事,你将永远得到你一直得到的结果。——托尼罗宾斯 在1980年代早期,美国汽车公司的高层主管定期前往日本参观,想要了解日本汽车行业为何能超越美国。这些主管返回后常说:“他们没有让我们看到真正的工…

工作任务管理平台作品集源文件 figma格式UX/UI设计师作品集

交付文件:作品集源文件项目源文件包装样机源文件字体文件 交付格式:figma、psd 作品集文件页数:28页 项目文件页数:12页(Web)12页(App) 以下重点哦,请认真阅读&#…

碰撞检测与相交测试-unity碰撞检测和相交测试的实现原理

Unity中的碰撞检测和相交测试是通过物理引擎来实现的。Unity使用了基于迭代的动态物理引擎,其中包含了一些常用的碰撞检测算法和相交测试算法。 碰撞检测是指判断两个物体是否发生了碰撞,而相交测试是指判断两个物体是否有交集。 在Unity中&#xff0c…

Halcon 3D 使用3D ROI截取模型

Halcon 3D 使用3D ROI截取模型 链接:https://pan.baidu.com/s/1UfFyZ6y-EFq9jy0T_DTJGA 提取码:ewdi * 1.读取图片 ****************

《R语言与农业数据统计分析及建模》学习——方差分析

方差分析是研究一种或多种因素的变化对试验结果的观测值是否有显著影响,从而找到较优试验条件或生产条件的一种常用数理统计方法。 方差分析根据平方和的加和原理,利用F检验,进而判断试验因素对试验结果的影响是否显著。 分为:单因…

CMake+qt+Visual Studio

#使用qt Creator 创建Cmake 项目,使用Cmake Gui 生成sln 工程,使用Visual Studio 开发 ##使用qt Creator 创建CMake项目 和创建pro工程的步骤一致,只是在选择构建系统的步骤上选择CMake,接下来步骤完全相同 工程新建完成之后,构建cmake 项…

公司服务器中的kafka消息中间件挂了,我是如何修复的?

今天的公司的system系统服务在运行过程中,提示连接不上kafuka的消息中间件。但是负责kafka的同事已经离职了,询问公司开发也不知道如何处理,我是如何重启kafka消息中间件使system系统服务正常运行? 查看kafka的安装位置 在下面的…

Java基础:设计模式之原型模式

原型模式是一种创建型设计模式,它允许我们通过复制现有的对象来创建新的对象,而不是每次都通过构造函数新建。这种模式适用于那些创建新对象成本较高或者构造过程复杂的情况。在原型模式中,一个对象通过实现Cloneable接口并重写其clone()方法…

WPF —— MVVM架构

1 什么是MVVM? MVVM是一种软件架构模式,它将应用程序分为三个层次 model(数据模型),view(视图),viewmodel(视图模型) model:表示应用程序当中数…

什么是RabbitMQ,RabbitMQ基本概念,RabbitMQ的使用场景

目录 面试官:什么是RabbitMQ,RabbitMQ的使用场景什么是RabbitMQ?RabbitMQ基本概念RabbitMQ的使用场景举例该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:什么是RabbitMQ,RabbitMQ的使用场景 …

SpringCloud之Feign集成Ribbon

Feign定义【可跳过】 Spring Cloud Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。其英文表意为“假装,伪装,变形”,是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求&#x…

jmeter固定定时器,生效是在请求发送前还是发送后

一、结论 先说结果,是生效在请求发送前 二、背景 在压测流程的时候,生成订单后紧接着调订单查询接口,查询不到,报错率还挺高的,原因肯定是主从延迟,但是DBA非说延时1s内是正常的,在CPU耗用在40%以内的情…

IDM下载器_Internet Download Manager 6.42.7

网盘下载 IDM下载器是一款针对互联网所打造的下载管理器。IDM下载器能将下载速度提高5倍,恢复因丢失的连接,网络问题,计算机关闭或意外断电而重新启动中断或中断的下载。IDM下载器还可支持所有流行的浏览器,以使用独特的“高级浏…

【打工日常】云原生之部署私有化个人工作云盘

一、FileGator介绍1.FileGator简介FileGator是一个免费开源自托管的Web应用程序,用于管理文件和文件夹,部署在自己的服务器上,解放笔记本的压力,随时随地的能看到自己的文件,并且可以共享,方便团队的协作,更有利于个人工作的开展。2.FileGator功能管理本地存储库文件夹中…

视频改字祝福 豪车装X系统源码uniapp前端源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 uniapp视频改字祝福 豪车装X系统源码 全开源。 创意无限!AI视频改字祝福,豪车装X系统源码开源,打造个性化祝福视频不再难! 想要为你的…

RealSenseSR300工程环境配置说明

新建目录结构如下: output:存储可执行文件.exe等src:存储源码.cpp .h等3rdparty:存储第三方库 opencv等 其中将源码按照main及其相关文件分为以下三类 vs2015许可证到期后先激活,激活码很多网上有,如:HMGNV-WCYXV-X7G9W-YCX63…

开发Chrome插件入门

开发Chrome插件(也称为Chrome扩展)是一个相对直接的过程,尤其对于已经熟悉HTML、CSS、JavaScript的前端开发者而言。以下是开发Chrome插件的基本步骤和示例: 1. 准备工作 首先,确保你有一个适合开发的环境。通常这意…

2024.4.25

#include <iostream> #include <iomanip> using namespace std; class Person{const string name;int age;char sex; public:Person(const string name):name(name){cout << "第一个Person构造函数" << endl;}Person():name("zhangsan&…