Javascript 如何在Sails.js v0.11中触发自定义套接字事件?
Sails.js和sockets有问题。在大多数情况下,它们工作得很好。我能够在客户端订阅套接字(Sails Socket client和AngularJS),并在使用Blueprint更新记录时从服务器接收消息。但是,当我尝试使用更自定义的方法时,我无法触发套接字事件。我可以通过订阅以下内容来隔离客户Javascript 如何在Sails.js v0.11中触发自定义套接字事件?,javascript,angularjs,node.js,sockets,sails.js,Javascript,Angularjs,Node.js,Sockets,Sails.js,Sails.js和sockets有问题。在大多数情况下,它们工作得很好。我能够在客户端订阅套接字(Sails Socket client和AngularJS),并在使用Blueprint更新记录时从服务器接收消息。但是,当我尝试使用更自定义的方法时,我无法触发套接字事件。我可以通过订阅以下内容来隔离客户 // Listen for game model event io.socket.on('game', function(e) { console.log('Game Socket Ev
// Listen for game model event
io.socket.on('game', function(e) {
console.log('Game Socket Event');
});
// Subscribe to model record
io.socket.get('/game/' + gameId);
同样,这对订阅很有效,但是对于一些更复杂的任务,我必须针对控制器操作。这些通常包括大量的记录查找,可能是对服务的调用,最后是写入记录(或更多)。在链的末尾,当所有问题都得到解决时,我希望只向特定的客户机发出套接字消息。我想我可以用一些东西,比如
Game.findOne({ id: data.gameId }).exec(function(err, gameData) {
// Subscribe to the record
Game.subscribe(req.socket, gameData, ['create', 'update', 'destroy']);
// Various calls and updates to game model and others
Game.publishUpdate(gameData.id);
}
publishUpdate()调用中的游戏ID与订阅中的相同,控制器操作的端点是“/game/deal”,因此我想我的问题是是否需要使用套接字调用再次订阅此URL?我正在改变游戏记录,所以我本以为它会触发套接字事件,但事实并非如此
任何指点都是最受欢迎的。我使用的是v0.10.5,但升级到了v0.11,我也有同样的问题。。。所以我想在某个地方是我
我还要补充一点,现在autoWatch设置为on,Blueprint mirror选项也是如此。然而,我更愿意放弃自动观察,只选择应该实际发出哪些事件
谢谢。如果我没有看错您的问题,那么问题在于您使用的是HTTP请求,而不是套接字请求来访问
/game/deal
端点。如果是这样的话,Game.subscribe
调用将不起任何作用,因为服务器没有要订阅的套接字!如果你看看你的码头,你可能会看到船帆在抱怨:
`Model.subscribe()` called by a non-socket request.
你问:
我是否需要通过套接字调用再次订阅此URL
为什么不第一次就通过插座来点击呢
io.socket.get("/game/deal/123")
或者
io.socket.post
,io.socket.put
,等等。控制器操作中的所有逻辑都将按预期执行,额外的好处是req.socket
是一个可以订阅的真正套接字。是的,我在那一个上有一个http调用,而不是套接字调用,我的坏,将其调整到套接字请求,所有功能均按预期工作,始终有一个未完成。:)