我正在为我的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/