在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/)。
答案 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 contexts和message事件的组合,以便只有用户自己订阅他们自己的message
上下文,但他们订阅了到了他们在聊天室里的每个人的update
个语境。这样他们只能获得自己的直接消息,但他们会听到他们朋友的更新(即姓名和状态变更)。
将直接消息发送到控制器中的User
实例:
User.message(userInstance, msgData);
订阅该实例的message
上下文的任何套接字客户端都将收到带有以下数据对象的user
事件:
{
id: [the user ID],
verb: "messaged",
data: [the data in msgData]
}
如果需要,您还可以使用join
,leave
,broadcast
和emit
等low-level Sails Socket methods制作更专业的聊天服务器,但是这样做的Sails方式可以让你利用框架的强大功能!