使用Sails.js进行个性化聊天

时间:2014-05-07 07:50:30

标签: javascript jquery sockets socket.io sails.js

在sails.js或教程中是否有办法可以帮助我使用套接字(如pubnub)建立点对点聊天。

我正在尝试使用sails.js实现个性化聊天功能 这意味着我在我的应用程序中说了多个用户,用户可以与另一个用户聊天。因此,如果用户A在用户B聊天框中发送消息,则B(仅)接收,反之亦然。

我已经浏览过http://sailsjs.org/#!documentation/sockets,其中的文档提供了使用模型的示例。所以我想这不是一对一的聊天,而是像用户列表和用户配置文件这样的东西。

所以我知道我需要使用本机socket.io代码。我需要的是客户端可以为特定通道打开一个套接字,然后每当用户A输入到用户B时,该消息就存储在数据库中,并写在套接字上。我不知道如何在Sails中获得此功能。

我可以在MessagesController的index事件中编写代码。因此,我需要根据用户A和用户B的详细信息计算通道名称,并将其写入该通道的套接字。但我不知道如何将其写入该特定频道的套接字。我希望我能清楚自己想要什么。我发现这段代码是一个例子:

//Code For Server
var io = require("socket.io");
io.sockets.on("connection", function (sock) {
    sock.emit("welcomeMessage", { hello: "world" });
}
io.listen(80);

//Code For Client
var sock = io.connect('http://localhost');
sock.on('welcomeMessage', function (json) {
    //Handle Event Received
});

但是它并没有告诉我,我如何写入这个特定的套接字用于频道" welcomeMessage"从我想要的任何控制器。像PubNub支持的那样(http://www.pubnub.com/)。

1 个答案:

答案 0 :(得分:4)

你绝对可以使用基于模型的pubsub方法在Sails中进行点对点和群聊。在Sails v0.10(npm install sails@beta)中它更容易,并且在http://github.com/balderdashy/sailsChat有一个完整的例子。 Docs for Sails v0.10是here

使用v0.10的技巧是使用subscription contextsmessage事件的组合,以便只有用户自己订阅他们自己的message上下文,但他们订阅了到了他们在聊天室里的每个人的update个语境。这样他们只能获得自己的直接消息,但他们会听到他们朋友的更新(即姓名和状态变更)。

将直接消息发送到控制器中的User实例:

User.message(userInstance, msgData);

订阅该实例的message上下文的任何套接字客户端都将收到带有以下数据对象的user事件:

{
   id: [the user ID],
   verb: "messaged",
   data: [the data in msgData]
}

如果需要,您还可以使用joinleavebroadcastemitlow-level Sails Socket methods制作更专业的聊天服务器,但是这样做的Sails方式可以让你利用框架的强大功能!