微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

私人聊天消息使用Node.js,Socket.io,Redis in PHP

我正在为我的PHP应用程序中的一个实时私人消息系统工作.我的代码一起为所有用户服务.但我需要私人消息系统作为一对一的消息.

在设置节点和redis后,我可以得到我需要的消息数据:这里是代码::

前端 ::
1.我使用表格 – 用户名,信息和发送按钮

通知JS:

$( document ).ready(function() {

    var socket = io.connect('http://192.168.2.111:8890');

    socket.on('notification',function (data) {
        var message = JSON.parse(data);
        $( "#notifications" ).prepend("<p> <strong> " + message.user_name + "</strong>: " + message.message + "</p>" );

    });

});

服务器端js:

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var redis = require('redis');

server.listen(8890);

var users = {};
var sockets = {};

io.on('connection',function (socket) {

    console.log(" New User Connected ");
    // instance of Redis Client
   var redisClient = redis.createClient();
   redisClient.subscribe('notification');

   socket.on('set nickname',function (name) {
       socket.set('nickname',name,function () {
           socket.emit('ready');
       });
   });

  socket.on('msg',function () {
    socket.get('nickname',function (err,name) {
        console.log('Chat message by ',name);
    });
  });


   redisClient.on("message",function(channel,message)
   {
     // to view into terminal for monitoring
     console.log("Message from: " + message + ". In channel: " + channel + ". Socket ID "+ socket.id );

     //send to socket
     socket.emit(channel,message);
   });

   redisClient.on('update_chatter_count',function(data)
   {
      socket.emit('count_chatters',data);
   });

   //close redis
   socket.on('disconnect',function()
   {
      redisClient.quit();
   });

 });

HTML ::

<script src="https://cdn.socket.io/socket.io-1.3.5.js"></script>
<form .....>
<input ....... >
</form>
<div id="notifications" ></div>

总体输出

John : Hello
Kate : Hi
Others: .....

上面的代码在我的PHP应用程序中运行良好.现在我想建立私人或一对一的消息系统.

我需要为用户添加用户名或电子邮件或唯一套接字ID的方式.我对私人消息没有更多的想法.我试图在网上找到但却失败了.

**如何在我的PHP应用程序中设置私人消息? **

解决方法

变量的基本初始化: –

通常使mapOfSocketIdToSocket的MAP发送您要从前端发送消息的特定用户用户ID.在服务器中找到与userid映射的套接字obeject,并在该套接字中发出消息.以下是该想法的示例(不是完整代码)

var io = socketio.listen(server);
  var connectedCount = 0;
  var clients = [];
  var socketList = [];
  var socketInfo = {};
  var mapOfSocketIdToSocket={};

  socket.on('connectionInitiation',function (user) {
      io.sockets.sockets['socketID'] = socket.id;
      socketInfo = {};
      socketInfo['userId']=user.userId;
      socketInfo['connectTime'] = new Date();
      socketInfo['socketId'] = socket.id;
      socketList.push(socketInfo);

      socket.nickname = user.name;
      socket.userId= user.userId;

      loggjs.debug("<"+ user.name + "> is just connected!!");

      clients.push(user.userId);
      mapOfSocketIdToSocket[socket.id]=socket;
  }
  socket.on('messageFromClient',function (cmessageObj,callback) {
     for(var i=0; i<socketList.length;i++){
       if(socketList[i]['userId']==cmessageObj['messagetoUserID']){ // if user is online
        mapOfSocketIdToSocket[socketList[i]['socketId']].emit('clientToClientMessage',{sMessageObj: cmessageObj});
        loggjs.debug(cmessageObj);
      }
    }
  })

你可能想要私人一对多或一对一的房间概念(如果只有两个成员)http://williammora.com/nodejs-tutorial-building-chatroom-with/

原文地址:https://www.jb51.cc/nodejs/241271.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐