我在Ionic 4中创建了应用程序,对于后端,我使用Lumen。应用程序应该具有聊天页面,为此,我添加了Redis,Socket.io和nodejs。我成功创建了公共会议室,并且该会议室中的用户之间可以进行聊天。问题是如何向用户发送私人消息,如何初始化用户的私人房间。
这是我创建公共房间的方式:
constructor(private socket: Socket) {
this.getMessages().subscribe(message => {
this.messages.push(message);
});
}
getMessages() {
const observable = new Observable(observer => {
this.socket.on('message', (data) => {
observer.next(data);
});
});
return observable;
}
我从Lumen应用程序和Redis发送消息:
public function sendMessage()
{
$redis = Redis::Connection();
$sendMessage = json_encode(['user' => 'John Doe', 'text' => 'Some message, text', 'channel' => 'message']);
$redis->publish('add-message', $sendMessage);
}
我的节点服务器是:
let express = require('express');
let app = express();
let http = require('http').Server(app);
let redis = require('redis');
let client = redis.createClient("redis://127.0.0.1:6379");
let io = require('socket.io')(http);
app.use('/', express.static('www'));
http.listen(3000, '192.168.10.10', function(){
console.log('listening on *:3000');
});
client.on('message', function(chan, msg) {
let data = JSON.parse(msg);
io.sockets.emit(data.channel, msg);
});
client.subscribe('add-message');
最重要的是,在“消息”频道上订阅的每个人都会收到消息。问题是我来到聊天页面时在频道上订阅了用户。我不知道如何订阅用户,以及何时在其他用户向其发送消息的频道上。同样,该发送者用户如何创建新房间,我想使用用户ID作为房间名称(每个实例user1_user2)。 / p>
有人知道我可以解决这个问题吗?我什至不了解我的描述。
预先感谢