如何在Sails.js v0.11中触发自定义套接字事件?

Sails.js和套接字有问题。 他们的大部分工作很好。 我能够订阅客户端(Sails套接字客户端和AngularJS)上的套接字,并在使用Blueprint更新logging时从服务器接收消息。 但是,当我尝试去更多的自定义方法,我不能得到套接字事件触发。 我可以通过订阅他们如下隔离客户…

// 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); 

同样,这对订阅工作正常,但是对于一些更复杂的任务,我必须针对控制器操作。 这些通常涉及许多logging查询,可能是一个服务的调用,最后写一个logging(或更多)。 在链的最后,当一切都解决了,我想发出一个套接字消息只有特定的客户端。 我想我可能会使用像…

 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套接字调用? 我正在改变游戏logging,所以我会认为它会触发套接字事件,但事实并非如此。

任何指针将是最受欢迎的。 我使用v0.10.5,但升级到v0.11,我有同样的问题…所以我想这是我的地方。

我也应该添加,现在autoWatch设置为打开蓝图镜像选项。 不过,我宁愿摆脱autoWatch,只挑选哪些事件应该实际发出。

谢谢。

如果我正确地阅读你的问题,这个问题是你用HTTP请求,而不是套接字请求击中/game/deal端点。 如果是这样的话, Game.subscribe调用不会做任何事情,因为服务器没有套接字来订阅! 如果你看看你的terminal,你可能会看到Sails抱怨:

 `Model.subscribe()` called by a non-socket request. 

你问:

我是否需要使用套接字调用再次订阅此URL?

为什么不第一次通过套接字打它?

 io.socket.get("/game/deal/123") 

io.socket.postio.socket.put等。控制器动作中的所有逻辑将按预期执行, req.socket的附加好处是可以订阅的真实套接字。