【发布时间】:2018-07-19 09:29:36
【问题描述】:
我正在尝试建立一个聊天服务器,并且我在正确的轨道上:
我有一个生成验证令牌的 PHP 文件, 如果令牌有效,我已经设置了处理消息的服务器。
但我有点困惑。 我想验证 USER 1 和 USER 2 是否在同一个群聊中。如果不是,那么我想否认这条消息:就像在 facebook 中一样,如果一个人没有被添加为朋友,你就无法向他们发送消息。
服务器文件:
var app = require('express')(); // app
var server = require('http').Server(app); // on http create server
var io = require('socket.io')(server);
var socketioJwt = require("socketio-jwt"); // JWT for authentication
var chatRooms = [];
io.sockets.on('connection', socketioJwt.authorize({
secret: 'xxx',
timeout: 2000
})).on('authenticated', function(socket) {
//this socket is authenticated, we are good to handle more events from it.
console.log('User connected and authenticated (' + socket.decoded_token.nickName + ' (' + socket.decoded_token.userId + '))');
socket.on('disconnect', function(){
console.log('User disconnected (' + socket.decoded_token.nickName + ' (' + socket.decoded_token.userId + '))');
});
socket.on('subscribe', function() {
socket.join(socket.decoded_token.userId);
console.log('subscribed ');
});
socket.on('unsubscribe', function() {
socket.leave(userId);
});
socket.on('send', function(data) {
var messageData = {
"userId": socket.decoded_token.userId,
"toUserId": data.toUserId,
"chatId": data.chatId,
"users": [socket.decoded_token.userId, data.toUserId],
"message": data.message
};
io.sockets.in(data.toUserId).emit('message', messageData);
io.sockets.in(socket.decoded_token.userId).emit('message', messageData);
console.log('msg sent');
});
});
server.listen(3000, function(){
console.log('listening on *:3000');
});
我是否应该在服务器文件中执行 Mysql 数据库检查, 或者我应该使用我不知道,更多的令牌?或者你怎么看?有没有通用的验证方式?
我想将消息保存到我的数据库中,所以每当用户发送消息时,它都会做两件事:
- 它调用一个 PHP 文件来验证 user1 和 user2 是否是朋友,如果是,则将消息保存在数据库中
- 它将消息发送到我的服务器并实时传递给用户 2。(我也需要在这里检查友谊)
其实我不知道如何同步
- 验证
- 保存到数据库
- 实时发送
我已阅读有关此的文章和博客,但没有找到解决方案。
【问题讨论】: