Я хотел бы транслировать или передавать всем клиентам, подключенным через SocketIO, всякий раз, когда выполняется задание Haroku Scheduler.Я настроил планировщик Heroku, который выполняется каждые 10 минут. Он выполняет запрос get, который находится в модуле, называемом роутер.Цель - делать обновления для клиента каждые 10 мин.Я пробовал с вещанием и излучением, но я довольно новичок в этой игре.
Я что-то упустил - возможно, SocketIO нужен клиентский запрос, а не задание планировщика heroku, или мои настройки сервера каким-то образомсломана.В любом случае это не сработает.Требуется помощь.
Мой маршрутизатор
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
const api = require('./routes/api');
const PORT = [3000, process.env.PORT];
app.use(cors());
app.use(express.urlencoded({
extended: true
}));
app.use(express.json());
//Middleware that attach io to req so that I can use it in router.
app.use(function (req, res, next) {
req.io = io;
next();
})
app.use('/api', api);
server.listen(PORT[1], function(){
console.log("app listen on localhost port something" )
});
Мой маршрутизатор (который выполняется каждые 10 минут).
router.get('/event/emitEventUpdates', (req, res)=>{
//Every 10 min. the events on client must be updated
console.log("i server emitEventUpdates");
req.io.on('connection', function (socket) {
socket.emit('message', {type:'new-message', text: "message from server"});
server"});
res.send({message : "all done from API"})
})
})
Мой клиент - приложение Angular 6, котороеделает соединение.Observable выглядит следующим образом:
let observable = new Observable(observer => {
this.socket.on('message', (data) => {
console.log("Received message from Websocket Server")
})
return () => {
this.socket.disconnect();
}
});
Я бы предположил, что всякий раз, когда наблюдаемая активна, консоль должна что-то записывать в консоль.Я могу добавить дополнительную информацию об этом, если необходимо, но я думаю, что проблема на стороне сервера ..