使用sails.sockets.join和sails.sockets.broadcast将sails.js发送到客户端并不会将信息返回给客户端

时间:2014-07-19 07:20:36

标签: javascript node.js websocket socket.io sails.js

我尝试在客户端使用Sails.js和sails.io.js创建一对一聊天。

我可以让io.socket.getio.socket.post发挥作用,但我无法按照此处的说明从sails.sockets.broadcastModel.publish收到任何内容:

Personalized chat using Sails.js

或在这里

Sails.js + socket.io: Sending messages from server to clients

服务器端代码:

UserController.js

module.exports = {
    listen: function(req, res) {
        console.log("about to join " + userId);
        sails.sockets.join(req.socket, req.param('userId'));
    }
};

来自:http://beta.sailsjs.org/#/documentation/reference/sails.sockets/sails.sockets.join.html

MessageController.js

// Some code to get userId and message model here

console.log("about to broadcast on " + userId);
sails.sockets.broadcast(userId, 'conversation_message', message); 

// Did not JSONify the message model, not sure if I need to?

来自:http://beta.sailsjs.org/#/documentation/reference/sails.sockets/sails.sockets.broadcast.html

客户端代码:

// Some code to get userId...

io.socket.get('/user/listen', {
    userId: userId
}, function() {
    io.socket.on('conversation_message', function(message) {
        console.log("we have a message");
    });
});

当我点击使用userId触发广播的路线时,不会向此客户端代码发送任何内容以记录we have a message。有什么想法吗?

我已经尝试过Model.subscribe / Model.publish方法,但没有运气 - 同样的问题。

更新listen功能实际上并没有返回 - 正如有人在评论中建议他们后来删除的那样。将res.send(200);添加到listen函数的末尾足以使其正常工作。

如果那个人再次添加他们的评论作为答案,我会接受它。

1 个答案:

答案 0 :(得分:1)

(那就是我。我认为我的评论可能不值得,因为我重读你的帖子,你说你有工作,所以我认为我错了。我的评论是下面的效果,但我不# 39;记住逐字记录)

您是否检查过以确保您实际上是在客户端收听回复?您在整个代码中实际获得了哪些日志语句?把一个console.log(' get user listen')放在客户端socket.get里面。