gpt4 book ai didi

php - 在 PHP 中使用 Node.js、Socket.io、Redis 的私有(private)聊天消息

转载 作者:IT王子 更新时间:2023-10-29 05:56:24 26 4
gpt4 key购买 nike

我正在为我的 php 应用程序开发一个实时私有(private)消息系统。我的代码适用于所有用户。但我需要私有(private)消息系统作为一对一的消息。

在设置 Node 和 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 应用程序中运行良好。现在我想设置私有(private)或一对一的消息系统。

我需要为用户添加用户名或电子邮件或唯一 socketID 的方式。我对私有(private)消息没有更多的想法。我试图在网上计算但失败了。

**如何在我的 php 应用程序中设置私有(private)消息? **

最佳答案

变量的基本初始化:-

首先,制作mapOfSocketIdToSocketMAP,然后从前端发送您要向其发送消息的特定用户的userid。在服务器中,找到与用户标识映射的套接字对象,并在该套接字中发出您的消息。这是这个想法的示例(不是完整的代码)

  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);
}
}
})

要么你想去私有(private)一对多的聊天室,要么你可以去一对一的 channel 交流(如果只有两个成员交流)http://williammora.com/nodejs-tutorial-building-chatroom-with/

关于php - 在 PHP 中使用 Node.js、Socket.io、Redis 的私有(private)聊天消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37247537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com