socket io 推送消息的问题
发布于 6 年前 作者 quanpf2481 2760 次浏览 来自 问答

最近做了一款聊天室的app,用socket io来做长连接,一般是监听事件,然后进行相应的处理,但是如果现在想往客户端主动推送一些消息的话,应该怎么来处理呢???有没有相关的参考或者例子或者思路都可以,谢谢!!!

9 回复

你需要仔细了解下socket房间的概念 还需要了解socket客户端的概念

直接通过客户端产生的连接对象,用emit方法发数据就行了啊。要给谁发,就用谁的连接对象。

来自酷炫的 CNodeMD

可以参考下我开放的一个项目,有socket.io的应用。 https://github.com/sylarmeng/wecatering

@tangchi695 你说的意思我明白,就是在socket连接下发消息是吧,我现在是在定时任务里面,需要向聊天群里发送消息,应该怎么样来处理呢??有点晕!!!

分为向房间推消息和向单个socket连接推消息 向房间: socket.to(roomId).emit('message', messageData); 向个人: io.to(socketId).emit('message', messageData); 可以看看我的聊天室项目: https://github.com/yinxin630/blog/issues/3

服务端定义事件,客户端订阅就可以了

@szluohua 这个订阅,是不是要建立在socket的基础上呢??有没有参考的例子呢

@quanpf2481

//example1
//发送事件
	socket.emit('searchUser', text);
//监听事件
		socket.on('searchUser', async text => {
			const nin = [socket.request.userId];
			return await Controllers.user.findByNameOrUserNameOrAliasName(text, nin);
		});
//example2:
//发送带有回调的事件,只需要加callback
socket.emit('searchUser', text, (res)=>{
	console.log(res);
});
//监听
		socket.on('searchUser', async (text, callback) => {
			const nin = [socket.request.userId];
			const user = await Controllers.user.findByNameOrUserNameOrAliasName(text, nin);
			return callback({user})
		});
回到顶部