#javascript #node.js #express #socket.io #electron
#javascript #node.js #выражать #socket.io #electron
Вопрос:
У меня возникли некоторые проблемы с использованием сокетов для подключения приложения electron к веб-сайту node (express), размещенному на heroku.
В принципе, у меня есть 2 клиента, для простоты я буду называть их учителем и учеником. Таким образом, учитель отправляет данные в express, а express должен отправить данные обратно ученику. Поскольку сокет должен быть открыт со стороны клиента, я, таким образом, отправляю ping в express от student с некоторыми фиктивными данными, чтобы подключить сокет, а затем транслирую данные из express.
То, что я пробовал
учитель и ученик находятся в одном приложении / учитель не используется, когда используется ученик, и наоборот
function pingServer() {
socket.emit("givebackinfo", "sendinfo");
setTimeout(pingServer, 5);
}
ipcMain.on("serverPing:getbackinfo", function (E, item) {
console.log(item);
if (item == "returninfo") {
socket.emit("givebackinfo", "sendinfo");
// pingServer()
} else {
console.log("error");}
});
// receive data from express
socket.on("datareturns", (msg) => {
console.log(msg);
mainWindow.webContents.send("RedrawData", msg);
});
Проблема
В express я получаю «sendinfo», но я не могу отправить данные обратно клиенту, который их отправил
выражать
rowDelivered = 0;
// Connection for students => sends back relevant data
io.on('connection', (socket) => {
socket.broadcast.emit('datareturns', "returns");
socket.on('givebackinfo', (msg) => {
console.log(msg)
socket.broadcast.emit('datareturns', "returns");
// socket.emit('datareturns', "sendinfo returns")
if (msg != "sendinfo") {
(knex('test').where('id', '>', rowDelivered).then((data) => {
// console.log(data);
// console.log(rowDelivered);
if (data.length >= 1) {
console.log(data)
socket.broadcast.emit('datareturns', data);
} else {
// statement
}
})).then(() => {
knex('test').max('id').then((maxId) => {
rowDelivered = maxId[0].max
});
})
} else {
socket.broadcast.emit("datareturns", "value wrong for redraw data");
}
});
});