socket.io实现向特定用户发送私人信息(基于express框架)

今天还是来看看socket的另外一个需求,向特定用户发送私密信息而其他用户没办法收到的实现
还是基于前两篇博客的内容,假设我们的服务器已经搭建好,还有一个简单的html页面。
第一步,我们需要在express后台里面添加一个socket监听函数,叫做personal,然后需要定义一个connectedusers对象,用来承载连接到我们的io的所有socket对象,保存起来,后面是需要用到的。整体思路也是基于上述的条件,我们将所有socket根据他们传递过来的唯一id,绑定到connectedusers身上,后续可以根据id索引到那个socket,然后对他单播,代码如下:
express后端的socketio页面

var connectedusers={}    //定义大对象
//修改message函数,让用户一旦发送信息,就记录他们的id。
socket.on('message',function(obj)
        {
            socket.userid=obj.userid
            connectedusers[socket.userid]=socket  //将这个用户,根据他们的id作为对象的索引,绑定到connectedusers身上
            io.emit('message',obj)
            console.log(obj.userid+'说:'+obj.content);
        })
socket.on('personal',function(userid)    //添加personal监听函数
        { 
            console.log(userid);
            if(connectedusers.hasOwnProperty(userid))  //先根据id搜索有没有这个用户
            {
                connectedusers[userid].emit('personal',socket.userid)   //通过索引得到对应用户socket,然后emit触发前端函数
            }
            else
            io.emit('personal','所有人')   //没有那个用户就广播
        }) 

需要特别说明的是,上述的代码中,我为了简单,是直接对message进行改造,实际上为了完美,我们应该根据定义login函数,来实现绑定到大对象的功能。
之后,就是在前端写一个personal函数,用来显示信息:

this.socket.on('personal',function(userid)
        {
            console.log('收到来自'+userid+'的信息');
        })

这个逻辑的结果就是,前端的某个用户知道另外一个用户的id,然后使用personal函数,传入想要发送私人信息的用户id,之后执行,对方用户(最右边浏览器窗口)就会在控制台打印出“收到来自×××的信息”,其中×××是发送信息的用户id(最左边的浏览器窗口),而除了被发送的用户,其他用户是不会收到的(如下图中间的浏览器),效果图如下:
在这里插入图片描述
一开始感觉还是有难度的,结果写完发现好像 很简单 ~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值