В реальном времени: Angular 6 + Loopback + loopback-sdk-builder + Модуль ввода-вывода - PullRequest
0 голосов
/ 05 октября 2018

После нескольких часов исследований и испытаний я наконец пришел за помощью ... Я хочу установить соединение в реальном времени с обратной связью.Я использую 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?

Спасибо

Майк

...