当前位置:   article > 正文

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

socketio 指定 发送

今天还是来看看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','所有人')   //没有那个用户就广播
        }) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/973902
推荐阅读
相关标签
  

闽ICP备14008679号