如何在sails.js 0.10中接收套接字事件?

我有一个名为Collection.js的模型,它看起来像这样:

 module.exports = { attributes: { title: { type: 'string', required: true }, description: { type: 'text', required: false }, sessions: { collection: 'session', via: 'collection' } } } 

据我所知,这个消息是在创build新模型实例时通过套接字发送的,可以通过模型名称获得。

所以我已经在我的app.coffee文件中进行了app.coffee

 socket = io.connect() socket.on 'collection', -> console.log 'hey' 

我已经validation了“环境”的作用,因为我得到了socket.on 'connect'. -> console.log 'hey'通知socket.on 'connect'. -> console.log 'hey' socket.on 'connect'. -> console.log 'hey' ,但我没有得到任何模型事件,如创build或破坏logging!

蓝图被激活。 我需要改变什么?

更新

这里有更多的代码,我想如何使用它:

 $('document').ready -> noData = $('#list tr') socket.get '/collection', (res) -> createList(res) 

所以,套接字应该订阅所有的事件。

后来我想钩住这个事件:

 socket.on 'collection', (res) -> socket.get '/collection', (res) -> recreateList(res) 

但从来没有通知。

更新2

我的控制器CollectionController.js看起来像:

 module.exports = { manage: function(req, res) { Collection.watch(req); return res.view(); } } 

默认情况下,当您执行socket.get('/collection')时,您将订阅find蓝图所返回的所有实例,因此应在更新或销毁任何实例时通知您。 但是,除非您在Sails代码中显式调用Collection.watch(req) ,否则不会收到有关正在创build的logging的通知,或者b)在/config/blueprints.js中将autoWatch设置为true。 有关更多信息,请参阅.watch()和.subscribe()的参考 。

一般的想法是,对于可能有数千或数百万用户的大规模应用程序,每当创build新用户时向每个连接的套接字发送通知就没有任何意义。 套接字只应通知他们特定订阅的实例的变化。

更新

终于开始审查有问题的代码后,看起来有几件事情需要注意:

  1. 代码中正在监听的套接字事件是Collection ,但它需要collectionCollection是模型的全球化ID,但collection是其身份 ,用作事件名称。 案件事关重大。
  2. 同样,/ autoWatch中的autoWatch设置区分大小写; 你有它作为autowatch
  3. 默认情况下,您不会从蓝图中获取您自己触发的事件的套接字通知。 你可以使用套接字请求方法的callback( socket.post(url, data, callback) )。 这可以让你对自己触发的行为做出不同的反应,而不是别人触发的行动。 如果您真的想从蓝图中获取您自己的套接字通知,可以在/config/blueprints.js设置mirror: true

它看起来像mirror需要被添加到文档,虽然它主要是一个开发工具,你可能会后悔用于生产;)

一旦我改变了这三件事,代码运行良好!