Получите излучение сокета от клиента, используя Express Routes - PullRequest
0 голосов
/ 07 августа 2020

Я могу отправлять и получать сообщения с помощью socket.io между сервером и клиентом правильно, используя следующий код на server.js.

const express = require('express')
const app = express()
const port = 4000
var http = require('http').createServer(app);
var io = require('socket.io')(http);
var args = {class: "one"};

io.of('/programs').on('connection', function (socket) {
    socket.on('joinRoom', (room) => {
        socket.join(room);
        console.log("New Client joined room: " + room);
    });
    socket.emit('welcome', args)
    socket.on('welcome', (data) => {
        console.log('Got result:', data);
    });
});

Здесь данные принимаются правильно. Теперь я хочу использовать маршрут Express, чтобы всякий раз, когда я попадаю в маршрут, он должен выдавать welcome, чтобы клиент захватил и вернул данные. Для этого я внес следующие изменения:

const express = require('express')
    const app = express()
    const port = 4000
    var http = require('http').createServer(app);
    var io = require('socket.io')(http);
    var args = {class: "one"};
    
    io.of('/programs').on('connection', function (socket) {
        socket.on('joinRoom', (room) => {
            socket.join(room);
            console.log("New Client joined room: " + room);
        });
    });
    app.get('/', (req, res) => {
        io.of('/programs').to('apps').emit('welcome', args);
        // Receive data emitted by client
        // res.send(data)    
    });

Здесь apps номер. Первая строка в app.get работает, но я не могу понять, как получать данные без socket, как делал раньше, без повторного открытия соединения при каждом вызове маршрута. Возможно ли такое?

...