После нескольких часов исследований и испытаний я наконец пришел за помощью ... Я хочу установить соединение в реальном времени с обратной связью.Я использую Builder SDK https://github.com/mean-expert-official/loopback-sdk-builder/
Похоже, что у застройщика есть несколько возможностей для создания в реальном времени.Включая модуль ввода-вывода и Fireloop.Документация Fireloop находится в автономном режиме ... http://fireloop.io/
Поэтому я сосредоточил свое тестирование на модуле ввода-вывода модуля, но документация приблизительная ...
https://github.com/mean-expert-official/loopback-sdk-builder/wiki/9.-IO-Module
Итак, первым шагом я делаю загрузочный скрипт для loopback (с https://loopback.io/doc/en/lb3/Boot-script-generator.html)
Но код, приведенный в примере, не работает.
module.exports = function (app) {
app.on('started', function () {
app.mx.IO.emit('test', 'Hello World');
app.mx.IO.on('test', function (message) {
console.log('MESSAGE: ', message);
});
});
};
". Mx" не работаютсуществует в приложении.
Так что после какого-то другого поиска я нашел способ с помощью https://gist.github.com/frzkhan/e302177285f850cc04010d6b64a06321
Я изменил server.js
app.start = () => {
app.server = app.listen(() => {
app.emit('started')
const baseUrl = app.get('url').replace(/\/$/, '')
console.log('Web server listening at: %s', baseUrl)
if (app.get('loopback-component-explorer')) {
const explorerPath = app.get('loopback-component-explorer').mountPath
console.log('Browse your REST API at %s%s', baseUrl, explorerPath)
}
})
return app.server
}
Затем в моемзагрузочный скрипт:
'use strict';
const SocketIo = require('socket.io')
module.exports = function(app) {
app.on('started', function () {
app.io = SocketIo(app.server)
app.io.on('connection', socket => {
console.log('a user connected')
app.io.emit('test', 'Hello World');
app.io.on('test', (socket) => {
console.log("This log is never displayed on server side !");
app.io.emit('test', 'Reply Hello World');
})
socket.on('disconnect', () => {
console.log('user disconnected')
})
})
});
};
И в моем компоненте:
constructor(private realTime: RealTime){
LoopBackConfig.setBaseURL('http://127.0.0.1:3000');
LoopBackConfig.setApiVersion('api');
this.realTime.onReady().subscribe(() => {
this.realTime.IO.emit('test', 'This is a message emit from client');
this.realTime.IO.on('test').subscribe((msg: any) => console.log('This is a message emit from the server =' + msg), (err: any) => console.log(err));
});
}
И в результате я получил сообщение с консоли клиента сервера:
socket.connections.ts: 74 Создание нового соединения с: http://127.0.0.1:3000 real.time.ts: 103 Соединение в режиме реального времени установлено. admin-category.component.ts: 72 Это сообщение отправлено с сервера = Hello World
Но в моей консоли на стороне сервера:
a user connected
Я также добавил кнопку для выдачи сообщения:
emitMessage() {
console.log(this.realTime.connection.isConnected());
this.realTime.onReady().subscribe(() => {
this.realTime.IO.emit('test', "hey this is my message");
});
}
TЗначение this.realTime.connection.isConnected () истинно, но на стороне сервера ничего не получено ...
Любая идея или совет приветствуются!Что лучше для вас делать в реальном времени с Angular 6 и loopback?
Спасибо
Майк