工具

客户端: vue-socket.io
服务端:socket.io

安装

分别npm 安装,配置代码看相应文档,文档很详细

思路

1. 私聊
每个用户登录成功后则将自己的用户名或ID总之是一个唯一的变量,作为socket的名字,下面以id举例,毕竟各个场景下 id基本上都是唯一的,这样每个用户登录后都会得到指定的socket。

//client 登录成功后
this.$socket.emit('setName',id)//server
socket.on('setName',(id)=>{socket.name = id;
})

要进行私聊的时候,客户端要注册一个接收信息的socket事件,发送按钮被点击后让服务器触发发送信息的socket事件,但是不加约束的话,每个登录后的客户端的都会收到这个发出的信息,包括自己。下面是重点
那么既然是私聊,当然只希望指定人接收,接下来我们要做的就是
在发送按钮点击的时候,一定要传入你要发送信息用户的id,服务端会根据这个id找到对应的socket,利用这个socket触发对应的的socket聊天事件,这样你发的信息就只能传给他了,而且别人看不到

//client 注册的接收消息事件
sockets:{// 这时候你是接收方rcvMsg(msg){//msg是发送方放松过来的信息}
}
//发送消息   这时候你是发送方 按钮的点击事件,可以传入一个对象,包括你自己的id,发送的消息
this.$socket.emit('sendTo',obj);//serversocket.on('sendTo',(obj)=>{let toId = obj.id;//获取发送方的id;var toSocket;try {//查找指定socket,推荐使用underscore.js这个工具,toSocket = _.findWhere(io.sockets.sockets, {name: toId});toSocket.emit("rcvMsg", obj.msg);} catch (e) {console.log(`找不到${toName}`);}
})

这样私聊就完成了,其实socket本身就有socket.id作为独立区分,有兴趣的可以试试,但我感觉还得把这个id存起来,有点麻烦,有合适方案的欢迎评论区指教。

2. 群聊
其实socket.io官方文档中的示例已经给了很好的思路,
我大致说一下流程,代码就不贴了

  1. 当用户加入一个群以后,服务端将其加入以这个群命名的room(不懂得看官网的room API)
  2. 加入后,每次在群里发消息的时候,对消息进行广播,我们用broadcast,还是贴下代码把。。。
//这一行代码就是在指定房间里广播消息
socket.broadcast.to(groupName).emit("receiveMsg", msg)
  1. 相应的客户端写好接收就行了。

这样群聊也完成了

3. 添加好友
和私聊的思路差不多,获取指定user的id,找到他的socket,给他发送好友请求就可以了。

H-Chat: socket.io实现私聊,群聊,添加好友相关推荐

  1. socket.io简易教程(群聊,发送图片,分组,私聊)

    什么是Socket.io? 过去: 由于http是无状态的协议,所以实现聊天等通信功能非常困难,当别人发送一条消息时,服务器并不知道当前有哪些用户等着收消息,所以以前实现聊天通信功能最普遍的就是轮询机 ...

  2. socket聊天室实现-群聊,私聊,好友列表,完整版

    效果图 登录.好友上线,下线均提示. 点击好友列表所有人,发送消息,既为群聊 点击好友列表,好友名字,既为选中此好友进行私聊 服务器端代码 ChatRoomServer package sram.se ...

  3. Java基于Socket实现聊天、群聊、敏感词汇过滤功能

    首先的话,这个代码主要是我很久以前写的,然后当时还有很多地方没有理解,现在再来看看这份代码,实在是觉得丑陋不堪,想改,但是是真的改都不好改了- 所以,写代码,规范真的很重要. 实现的功能: 用户私聊 ...

  4. SpringBoot与webSocket实现在线聊天室——实现私聊+群聊+聊天记录保存

    SpringBoot与webSocket实现在线聊天室--实现私聊+群聊+聊天记录保存 引用参考:原文章地址:https://blog.csdn.net/qq_41463655/article/det ...

  5. 多线程+SOCKET编程实现qq群聊的服务端和客户端

    多线程+SOCKET编程实现qq群聊的服务端和客户端 标签(空格分隔): 多线程 网络编程 线程同步 一.设计思路 1.服务端 每来一个客户端连接,服务端起一个线程维护: 将收到的消息转发给所有的客户 ...

  6. 【uni-app】小程序实现微信在线聊天(私聊/群聊)

    之前学习使用uni-app简单实现一个在线聊天的功能,今天记录一下项目核心功能的实现过程.页面UI以及功能逻辑全部来源于微信,即时聊天业务的实现使用socket.io,前端使用uni-app开发,后端 ...

  7. socket.io实现在线群聊

    我自己在用socket.io开发,对官方网站上的文档,进行简单的整理,然后自己写了一个简单的聊天程序.最最开始 先安装socket.io: npm install socket.io 利用Node的搭 ...

  8. H-Chat:用户私聊群聊管理

    总共两个表 聊天记录表 最近联系人表 私聊 实现思路: 进入聊天界面发送消息且成功后,将此好友添加到最近联系人,且注明是用户 点击发送后,将本聊天记录存入本人和好友的聊天记录数据库中,默认isme=t ...

  9. javaWeb实现聊天室(私聊+群聊)

    写在前面 近几天,迎来了第一个小项目,不做不知道,一做吓一跳.好多知识都掌握的不够扎实,看似会了,但其实似懂非懂,不能真正掌握原理,导致使用起来错误百出.而且深深体会到,知识只有到用时方恨少,一个简单 ...

  10. Swoole实现私聊群聊

    代码 https://github.com/7117/Graphic-live-broadcasting-site/tree/master/swoole%20example/chatroom 数据结构 ...

最新文章

  1. python什么模块动态调用链接库_Python调用C/C++动态链接库的方法详解
  2. Codeforces 460E Roland and Rose(暴力)
  3. firefox的plugin-container.exe进程如何关闭?
  4. Redis(一):什么是NoSQL与NoSQL分类
  5. linux 查找文件 mysql数据库_Linux下MySQL数据库目录多了好多文件
  6. java最全基础知识_Java编程入门,选择排序(Selection Sort)怎么做?
  7. 广州线下见面会,来了!
  8. 2023中国科学技术大学计算机考研信息汇总
  9. 虚幻引擎5安装踩坑记录
  10. 20200726 plecs 元件显示变量名
  11. android平板安装win10,如何给平板电脑装win10系统?
  12. 光纤带光缆的特点及应用场景
  13. xdg-user-dirs
  14. 科技论文写作经验之谈
  15. pdf图片转换成word文字
  16. 写在19年初的后端社招面试经历(两年经验): 蚂蚁 头条 PingCAP
  17. U盘安装Ubuntu16.04报unable to find a medium containing a live file system和ACPI Error错误
  18. 9月26日-计算机导论-课程内容(3)
  19. 计算机如何修改任务管理器,win7如何更改任务管理器快捷键_win7更改任务管理器快捷键的教程...
  20. netty实现简单的rpc,支持服务集群

热门文章

  1. win7升级win10正式版_如何使用小白系统对win7升级win10操作
  2. RabbitMQ(一) | MQ技术对比,以及对RabbitMQ五种消息模型的使用
  3. 微信小程序源码喝酒游戏集合只有前台上传就可以使用
  4. 千帆竞发待东风――乱弹网络游戏广告
  5. es java 模糊查询_java使用elasticsearch进行模糊查询之must使用-项目中实际使用
  6. jquery点击事件写法
  7. Python中的图像增强
  8. 管理信息系统需求调研分析指南
  9. 卡特彼勒CAT SIS 售后服务系统3D零件图系统软件 2019年最新版
  10. 可汗学院公开课:统计学笔记——中心极限定理、置信区间