В настоящее время я разрабатываю приложение для чата в реальном времени с использованием Java и Node.js. Поскольку это приложение имеет функции общения в реальном времени, я не ожидаю каких-либо задержек при передаче сообщений между пользователями. В моем приложении пользователи должны проверять токены своей учетной записи, чтобы отправлять сообщения в режиме реального времени, и сообщения также должны сохраняться в базе данных. Однако из-за задержки операций с базой данных в этом процессе (например, проверки токенов) передача сообщений в режиме реального времени будет происходить с некоторой задержкой. Какой подход может быть подходящим для решения этой проблемы? Я не хочу каких-либо задержек или хочу, чтобы задержка была очень небольшой для моего приложения чата в реальном времени.
Например, даже если это связано с общением в реальном времени, следующий код приведет к некоторой задержке передачи сообщений из-за операций с базой данных:
const net = require("net");
const mysql2 = require("mysql2");
const jwt = require("jsonwebtoken");
require("dotenv").config();
const clients = [];
const server = net.createServer((socket) => {
socket.on("connect", () => {
clients.push(socket);
});
socket.on("end", () => {
const clientIndex = clients.indexOf(socket);
if (clientIndex !== -1) {
clients.splice(clientIndex, 1);
}
});
socket.on("data", (data) => {
const message = JSON.parse(data.toString());
connection.query("SELECT token FROM sessions WHERE user_id = ?", [message.user_id], (e, r) => {
if (!e && r.length > 0) {
jwt.verify(process.env.SECRET, r[0].token, (err, decoded) => {
if (!err) {
clients.forEach((client) => {
if (client !== socket) {
client.write(message.message);
}
});
}
}
}
});
});
});
const connection = mysql2.createPool({
host: process.env.HOST
port: process.env.PORT,
user: process.env.USER,
password: process.env.PASSWORD,
database: process.env.DATABASE
});
connection.getConnection((err) => {
if (err) return;
console.log("Connected to the database successfully!");
});
Подробнее здесь: https://stackoverflow.com/questions/781 ... o-database