gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:11:39 24 4
gpt4 key购买 nike

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

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

据我了解this文档,在创建新模型实例时通过套接字发送的消息,可通过模型名称获得。

所以我在我的 app.coffee 文件中剪下了这个:

socket = io.connect()

socket.on 'collection', ->
console.log 'hey'

我已验证“环境”是否有效,因为我在 socket.on“connect”上收到了通知。 -> console.log '嘿',但我没有得到任何模型事件,如创建或销毁记录!

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

更新

这里还有一些代码,我想如何使用它:

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

因此,套接字应该订阅所有事件。

稍后我想 Hook 这个事件:

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

但永远不会收到通知。

更新2

我的 Controller CollectionController.js 看起来像:

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

最佳答案

默认情况下,当您执行 socket.get('/collection') 时,您将订阅 find 蓝图返回的所有实例,因此您应该当它们中的任何一个被更新或销毁时得到通知。但是,除非您 a) 在 Sails 代码中显式调用 Collection.watch(req),或者 b) 设置 autoWatch/config/blueprints.js 中设置为 true。查看reference for .watch().subscribe()了解更多信息。

一般的想法是,对于可能拥有数千或数百万用户的大型应用程序,每当创建新用户时向每个连接的套接字发送通知是没有意义的。套接字只应收到有关它们专门订阅的实例发生更改的通知。

更新

在最终审查有问题的代码之后,似乎有一些事情需要注意:

  1. 代码中监听的socket事件是Collection,但必须是collectionCollection 是模型的全局化 ID,而 collection 是它的 identity,用作事件名称。这里的案例很重要。
  2. 同样,/config/blueprints.js 中的autoWatch 设置区分大小写;你有它作为 autowatch
  3. 默认情况下,对于您自己触发的事件,您不会从蓝图中获得套接字通知。您可以改用套接字请求方法中的回调(即 socket.post(url, data, callback))。这使您可以对自己触发的 Action 做出不同的 react ,而不是对其他人触发的 Action 使用react。如果你真的想从蓝图中获取自己的套接字通知,你可以在 /config/blueprints.js 中设置 mirror: true

看起来 mirror 需要添加到文档中,尽管它主要是一个您可能会后悔在生产中使用的开发工具;)

一旦我改变了这三件事,代码就可以正常工作了!

关于javascript - 如何在 sails.js 0.10 中接收套接字事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23181075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com