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

工具

客户端: 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);


//server

socket.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,给他发送好友请求就可以了。

你可能感兴趣的:(node.js,uniapp,Vue.js)