[gowebsocket搭建一对一,一对多的聊天室]第二篇:websocket间的通信树杉

事实上,websocket与websocket之间是无法进行直接相互通信的,需要我们将数据接收后,发送给另一个websocket链接,可以理解为

人员 加入的聊天室a 1,2,3b 1,2c 1a在1发送信息,全部人都能收到a在2发送信息,c收不到,以此类推a可以与c单独发送信息,接收方不在线时,系统能正常运行

D:.│go.mod│go.sum│main.go│msg.json├─api│socket_conn.go├─manage_socket_conn //用户的websocket管理模块│char_room_thread.go //线程主要负责对信息的群发│room_set.go //聊天室房间管理,房间的创建,销毁存储房间内的用户id│user_set.go //用户websocket链接管理,信息的发送,存储所有在线的webscoket链接,用户上下线├─middleware│Cros.go├─model│socket_msg_form_front.go│to_front.go├─route│route.go└─servicechat_room.go //数据层,模拟用户加入了那些聊天室2.代码内容user_set.go

packagemainimport( "WebSocketDemo/route" Mg"WebSocketDemo/manage_socket_conn")funcmain(){ ro:=route.GetRoute() goMg.GetCharRoomThread().Start() _=ro.Run("0.0.0.0:8083")}api层socket_conn.go内容

//群map用来存储每个群在线的用户idtyperoomSetstruct{ // 群id 群内的用户id roomsmap[int]map[int]struct{} locksync.Mutex oncesync.Once}//用户map用来存储每个在线的用户id与对应的conntypeuserSetstruct{ // 用户链接集用户id=>链接对象 usersmap[int]*websocket.Conn locksync.Mutex oncesync.Once}可能有人会问,roomSet.rooms[房间id]map[用户id]struct{}这里的用户集为什么是map类型,而不是[]int类型答:想一下,当用户下线或退出群聊时,怎么在[]int内进行删除该用户的id,注意:此时的[]int是无序的,而加入群时,又要防止id重复,所以实现起来过于麻烦,倒不如使用map,go底层为你封装好的值判断,使用起来会更方便,这里的struct{}是没有意义的,仅作为占位。当我要把信息发送给群里的所有用户时,先从roomSet根据房间id拿到用户idmap,将key转化为[]int,调用userSet的SendMsgByUidList()方法这样就完成了信息的群发而一对一的单发就不再重复说了,跳过roomSet,直接发送其他内容已经在代码注释里讲得非常详细了

func(ChatRoom)GetUserRoomIds(user_idint)(r_ids[]int,errerror){ ifuser_id==1{ r_ids=[]int{1,2,3} }elseifuser_id==2{ r_ids=[]int{1,2} }elseifuser_id==3{ r_ids=[]int{1} } return}user_id与接口名称一样,然后将所有websocket进行连接

发送json数据

房间2只有用户3不存在房间里所以用户3接收不到信息

用户2发送信息

可以看到所有人都可以接收信息一对一测试用户1发送json给用户3

可以看到只有用户2无法收到一对一的信息

关于websocket系列教程就已经结束了本章重点在于如何进行设计一个websocket管理模块,对在线的用户进行管理不足点:由于怕篇幅过长,没有将聊天数据存储起来,实现原理便是在发送信息前把数据存入库,搭配gorm的事务,当有错误时便回滚,用户上线时,前端获取本地存储的聊天数据id,拉取最后的数据列表,便可做到用户上线读取未接收的数据,这里可以在api层直接实现程序的所有问题,大部分都可以通过创造性的思想进行解决,希望本篇内容能对你有所帮助欢迎大家点赞转发

THE END
1.同城一对一一对多语音视频直播带朋友圈短视频机器人语音聊天室视频聊天聊天室 用户进入房间观看直播时候都会显示系统消息 用户进入直播间提示信息 显示用户昵称、发言内容 发送礼物 用户在直播中可以向心仪的主播发送礼物,发送礼物会消耗相应的钻石 金币(币) 直播系统的通用货币,可以用来给主播打赏礼物 充值 可对币进行充值,目前支持支付宝支付、微信支付。 分享到社交网络 可以将直播房间分https://blog.csdn.net/tutujunjun/article/details/130555090
2.2024年度盘点:聊天室软件有哪些聊天室软件有哪些【 網:H H 8 1 8 ? ? ?】【 網:? ? 5 7 8 . V I P】【域名手动在浏览器打开】棋pai俱乐部。 2.模式:线上筷三——唯一企鹅。3.地区:网站 官推荐的https://www.sohu.com/a/839540875_122158968
3.一对多一对一语音直播聊天室系统开发在移动互联网的快速发展中,语音直播聊天室系统作为一种新兴的社交与互动方式,正在逐渐占据互联网产品的舞台。致力于为用户提供高效、稳定和优质的语音直播聊天室系统。本文将深入探讨一对多与一对一语音直播聊天室系统的开发,功能特点,以及我们倾注的开发流程,让您更好地了解这款产品的魅力。 http://m.trustexporter.com/m21-d1595208.htm
4.FLASH局域网免服务器P2P聊天室源码(as3+flash开发)可以用这个源码自己编译出来使用!有编译好的程序,可以直接执行!主要功能是不需要服务器即可以实现P2P聊天!https://www.iteye.com/resource/tonl8-3544300
5.服务器大全leigaiting建立网页服务器的目的在于能够利用网络进行信息发布、数据处理、文件发布,目前还有许多的Internet网络应用也都必须通过网页服务器才能实现如:论坛,聊天室等等。要想让你的单机变成网页服务器,就必须安装网页服务器软件,然后你的网友就可以通过Web浏览器(如IE)浏览了。 http://blog.chinaunix.net/uid-9308336-id-2004747.html
6.视频聊天下载视频聊天合集下载领秀娱乐社区介绍领秀娱乐社区(领秀视频聊天室)是一款优秀的团队语音软件,使用领秀娱乐平台,可以高效的与朋友一起游 点击下载 悠米视频聊天软件 中文 更新时间:2017-06-06 悠米视频聊天是一款高清流畅的免费聊天工具,提供稳定流畅的视频聊天服务,支持一对一及一对多两大功能,没有任何收费现象,轻松交友无障碍,欢迎来http://www.downcc.com/p/h1_K4554_P2.html
7.Java单播实现一对多聊天javasocket做一个多人聊天Java单播实现一对多聊天 java socket做一个多人聊天 继《Java网络通信基石Socket》 ,Socket理论的实战Demo 使用Java编写,基于Socket的多用户聊天Demo 一、设计思想 多人聊天,,需要有一个服务器和多个客户端 【服务器】时刻监听客户发送过来的消息,,并将消息发送到各个客户端。https://blog.51cto.com/u_12204/7304030
8.免费的语音聊天软件腾讯云开发者社区是一种通过互联网实现语音通信的工具,用户可以通过该软件进行实时的语音交流。以下是对免费的语音聊天软件的完善且全面的答案: 概念:免费的语音聊天软件是一种通过互联网实现语音通信的工具,它可以让用户通过https://cloud.tencent.com/developer/information/%E5%85%8D%E8%B4%B9%E7%9A%84%E8%AF%AD%E9%9F%B3%E8%81%8A%E5%A4%A9%E8%BD%AF%E4%BB%B6
9.Javasocket通信模拟QQ实现多人聊天室java对socket通信基本原理明?后,那我们就写?个最简单的?例,制作聊天室。 服务器端Server: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 https://www.jb51.net/article/255685.htm
10.简易理解设计模式之:中介者模式——多人聊天室例子设计思路:每个聊天用户就相当于同事类,聊天服务器就相当于我们的中介者。整个流程是用户向聊天服务器发送一条消息,服务器会将此消息发送给群组中的所有人。将多对多的“网状结构”转化成一对多的“星型结构”,复杂的交互逻辑交给了中介者了。 ? 这个模式就是迪米特原则的具体体现。复习一下迪米特原则:https://www.jianshu.com/p/feac0f5fd817
11./cocoscreator聊天室作为大多数网络游戏开发人员的第一个项目,实现了一对多,一对一的数据交互,作为基石一般的存在,可以在上面搭建出各种复杂多变的网络程序,此篇作为我网络游戏开发的第一篇,希望与大家共勉。 服务器的选择 与CocosCretor搭配的全栈解决方案当然是Nodejs了 https://github.com/flovel/cocoscreator_chat
12.权威报道"METART极品人体"啊~爸爸我们换个地方c|免费看无码特级毛片中文|精品久久久久久图片专区。 2024年11月07日,悉尼唐人街升级 华人重开中餐厅“延续传统”,精品国色天香卡一卡二|看女洗澡露全身视频,中文字幕专区精品视频在线|国产精品又又酱在线午夜。 给儿子一次还是帮他打出来问一问|国产亚洲欧美精品坎贝奇入口 “31569”的背后:浙江https://www.ceh.com.cn/paperxufSfgt/
13.Corgi社交app下载Corgi安卓版下载v1.0.10考米网聊天交友 下载 最新软件 抖抖相机 最新版 下载 黑马追剧 下载 flowus息流 免费版 下载 美彩优品 最新版 下载 播王 下载 flowus息流 下载 poki小游戏 免费秒玩 下载 疯狂壁纸 最新下载地址 下载 相关合集 更多 手机聊天app合集 聊天室软件合集 交友类软件大全 手机聊天app合集 在这个互联https://app.3dmgame.com/android/157198.html