首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用feathersjs primus设置websocket连接

如何使用feathersjs primus设置websocket连接
EN

Stack Overflow用户
提问于 2016-12-22 03:36:35
回答 1查看 316关注 0票数 0

我正在尝试建立websocket由羽毛js + primus从这个链接:https://docs.feathersjs.com/real-time/primus.html。但我不知道如何从服务器端的primus获得server实例。下面是我的服务器代码:

代码语言:javascript
复制
  class SocketService {
      create(data, params, callback){
          ...
      }
  }

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

在上面的代码中,服务器可以在create()方法中从客户端获取消息。但是,在这种方法中,我如何从primus获得instance实例呢?我想使用spark.write方法向客户端发送消息。

下面是配置羽毛服务的服务器代码:

代码语言:javascript
复制
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);

下面的代码用于在服务器端注册事件侦听器,但它不能从客户端接收事件:

代码语言:javascript
复制
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)
  }

在客户端代码中,我使用下面的代码向服务器发送消息:

代码语言:javascript
复制
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'})

上面的代码有什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-22 15:18:00

理想情况下,您不会在服务中直接使用套接字连接。服务不应该知道是如何被访问的。有两种选择:

  • app.configure(primus(中设置和发送您自己的事件
  • 让服务发出自己的自定义事件

--

代码语言:javascript
复制
class SocketService {
  constructor() {
    this.events = [ 'someevent' ];
  }

  create(data, params, callback){
      this.emit('someevent', 'data');
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41275406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档