簡體   English   中英

如何使用Feathers.js-primus設置WebSocket連接

[英]How to use feathersjs-primus to setup websocket connection

我正在嘗試通過此鏈接通過羽毛js + primus設置websocket: https : //docs.feathersjs.com/real-time/primus.html 但是我不知道如何從服務器端的primus獲取spark實例。 下面是我的服務器代碼:

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

上面的代碼有什么問題?

理想情況下,您不會在服務中直接使用套接字連接。 服務不應該知道如何訪問它。 有兩種選擇:

-

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM