将自定义事件发布到Feathers.js的socket.io通道中的问题

时间:2018-09-20 12:24:07

标签: node.js socket.io feathersjs

我正在尝试使用feathersjs中的socket.io将数据发布到前端角度应用程序。我创建了一个频道,并创建了模拟数据流。

function mockData(app) {
    app.emit('testEvent', { test: 'Something happened'});
};
setInterval(mockData.bind(null, app), 1000);
app.publish('testEvent', (data) => { 
  console.log('test');
  return app.channel('testStream1');}
)

当客户端连接后,我将客户端添加到testStream1通道,如下所示。

 app.on('connection', connection => {
    // On a new real-time connection, add it to the anonymous channel
    app.channel('testStream1');
    app.channel('anonymous').join(connection);
    app.channel('testStream1').join(connection);
  });

app.publish回调没有执行任何操作,但是如果我尝试直接从socketio对象发出,则可以在客户端中接收值。

function mockData(app) {
  app.emit('testEvent', { test: 'Something happened'});
  app.io.emit('testStream1', { text: 'A client connected!' }); // Adding this line, I am able to get values from socketio client
};

似乎app.publish([event,] fn)未注册自定义事件testEvent的发布功能。如何使用app.publish获取数据?

1 个答案:

答案 0 :(得分:1)

将来可能会很实用,但是目前,发布商和渠道仅用于service events,而不是全球性活动。尽管app对象是事件发射器,但它不会向客户端发送任何内容。如果您create a custom service event命名为testEvent,则可以

app.service('myservice').emit('testEvent', 'this will be published to clients');

您还可以直接在app.io上发出任何Socket.io事件,但不会通过Feathers通道/发布机制进行。