2016-12-22 5 views
0

깃털 js + primus에 의해 websocket을 설정하려고합니다 : https://docs.feathersjs.com/real-time/primus.html. 하지만 나는 서버 측에서 primus로부터 스파크 인스턴스를 얻는 방법을 모른다. 아래는 내 서버 코드입니다.feathersjs-primus를 사용하여 websocket 연결을 설정하는 방법

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

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

위의 코드에서 서버는 create() 메소드에서 클라이언트로부터 메시지를 가져올 수 있습니다. 그런데 어떻게 그 방법으로 primus로부터 spark 인스턴스를 얻을 수 있습니까? spark.write 메서드를 사용하여 클라이언트에 메시지를 다시 보내려고합니다. 다음은

는 구성 깃털 서비스의 서버 코드 : 코드 아래

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); 

서버 측에 이벤트 리스너를 등록하는 데 사용되지만 클라이언트에서 이벤트를 수신 할 수 없습니다 :

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) 
    } 

클라이언트 코드에서 아래 코드를 사용하여 서버에 메시지를 내 보냅니다.

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'}) 

what wr 위의 코드와 함께?

답변

0

서비스에서 직접 소켓 연결을 사용하지 않는 것이 이상적입니다. 서비스는 액세스 방법에 대해 알 필요가 없습니다. -

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

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

나는이 있지만 서버를 시도

  • 설정하고
  • app.configure(primus(에 자신의 이벤트를 보내는 서비스가 custom events

자신의 방출 적이 : 두 가지 옵션이 있습니다 클라이언트로부터 메시지를받을 수 없습니다. 위 코드를 게시했습니다. –

+0

현재이 작업은 서버에서 클라이언트로 이벤트를 보내는 것입니다. 클라이언트에서 서버로 정보를 보내려면'create','update','patch' 또는'remove' 서비스 메쏘드를 사용해야합니다. 그것이 바로 그것입니다. – Daff