2016-12-22 4 views
0

Ich versuche, websocket durch Federn js + primus zu gründen, die von diesem Link folgen: https://docs.feathersjs.com/real-time/primus.html. Aber ich weiß nicht, wie man Funkeninstanz vom Primus in Serverseite holt. Unten ist mein Server-Code:Wie man feathsjs-primus benutzt, um websocket Verbindung zu gründen

class SocketService { 
     create(data, params, callback){ 
      ... 
     } 
    } 

module.exports = function(){ 
    const app = this 
    let ss = new SocketService() 
    app.use('socket-shell', ss); 
} 

In obigem Code kann Server die Nachricht vom Client in create() -Methode abrufen. Aber wie kann ich in dieser Methode eine Funkeninstanz von Primus bekommen? Ich möchte spark.write Methode verwenden, um Nachricht zurück an den Client zu senden.

Unten ist der Server-Code für die Konfiguration von Federn Dienstleistungen:

app 
    .use(compress()) 
    .options('*', cors()) 
    .use(cors()) 
    // .use(favicon(path.join(app.get('public'), 'favicon.ico'))) 
    .use('/', serveStatic(app.get('public'))) 
    .use(bodyParser.json()) 
    .use(bodyParser.urlencoded({extended: true})) 
    .configure(hooks()) 
    .configure(rest()) 
    .configure(primus({ 
    transformer: 'websockets', 
    timeout: false, 
    }, (primus) => { 
    app.use('socket-shell', function(socket, done){ 
     // Exposing a request property to services and hooks 
     socket.request.feathers.referrer = socket.request.referrer; 
     done(); 
    }); 
    })) 
    .configure(services) 
    .configure(middleware); 

Im Folgenden Code ein Ereignis-Listener Registrierung auf Server-Seite verwendet wird, aber es kann nicht Veranstaltung vom Client empfangen:

class SocketService { 

    constructor(options) { 

    this.events = [ 'someevent','serverevent' ] 

    } 

    setup(app) { 
    this.app = app; 

    let socketService = app.service('socket-shell') 
    socketService.addListener('serverevent', this.serverevent) 
    } 

    serverevent(msg){ 
    console.log('serverevent', msg) 
    } 

Im Clientcode verwende ich den folgenden Code, um eine Nachricht an den Server zu senden:

var primus = new Primus('http://localhost:3030'); 
    var app = feathers() 
    .configure(feathers.hooks()) 
    .configure(feathers.primus(primus)); 

    var messageService = app.service('/socket-shell'); 
messageService.emit('serverevent', {msg:'this is client'}) 

was wr mit dem obigen Code?

Antwort

0

Idealerweise würden Sie die Socket-Verbindung nicht direkt in Ihrem Dienst verwenden. Ein Dienst sollte nicht wissen, wie auf ihn zugegriffen wird. Es gibt zwei Möglichkeiten:

  • einrichten und Ihre eigenen Veranstaltungen senden in app.configure(primus(
  • Haben der Dienst seine eigene emittieren custom events

-

class SocketService { 
    constructor() { 
    this.events = [ 'someevent' ]; 
    } 

    create(data, params, callback){ 
     this.emit('someevent', 'data'); 
    } 
} 
+0

Ich habe versucht, dies aber auf den Server kann keine Nachricht vom Client empfangen. Ich habe meinen Code oben gepostet. –

+0

Momentan funktioniert das nur das Senden von Ereignissen vom Server an den Client. Wenn Sie Informationen vom Client zum Server senden wollen, müssen Sie die 'create',' update', 'patch' oder' remove' Service Methoden verwenden, dafür sind sie da. – Daff

Verwandte Themen