我目前开始在前端alognwith socket使用带有angularJs的sailsJS进行实时通信。
Sailsjs通过“sails.io.js”为websocket提供内置支持。在添加此库后,客户端将此代码添加到angular的聊天控制器中。
客户端代码
io.socket.get('/chat',{token:token},function(users){
console.log(users);
});
chatController在帆侧的动作是这样的。
服务器端代码
chat: function (req, res) {
console.log(req.isSocket);
//this gives true when called through client.
})
实际上对于sails非常新,所以我想建议如何维护连接用户的列表,因为m不使用redis作为存储目的.adapter是memory.array不是一个好主意,因为它会在重启server.m时消失风帆版本0.11.0。
提前完成。
答案 0 :(得分:1)
我有点新,但学习速度很快,这些建议应该让你在那里,除非其他人以伟大的方式回应......
他们在11中更改了它但是在10.5中我在config文件夹中使用sockets.js并且在连接时我将会话数据存储在带有套接字的数组中。 我在API /服务中创建了一个包含数组和套接字关联函数的服务。
对于v11,你不能完全相同,但你可以让你的第一个'hello'从客户端调用一个调用关联函数的控制器中的函数。
一些提示是不要让客户只是告诉你他们是谁,因为不只是从参数获取用户名,而是从req.session获取
(假设您有用户身份验证设置)
就我而言,我有 在 api / services / Z.js (将文件置于此处使其功能全局可访问)
var socketList = [];
module.exports = {
associateSocket: function(session, socket) { // send in your username(string) socket(object) id(mongoId) and this will push to the socketlist for lookups
sails.log.debug("associate socket called!",socketList.length)
var iHateYou = socketList
//DEBUG
var sList = socketList
var util = require('util')
if (session.authenticated){
var username = session.user.auth.username
var userId = session.user.id
// sails.log.debug("Z: associating new user!",username,userId,socket)
if (username && socket && userId) {
sList[sList.length]= {
username: session.user.auth.username,
socket: socket,
userId: session.user.id,
};
sails.log.debug('push run!!! currentsocketList length',socketList.length)
} else sails.log("Z.associateSocket called with invalid data", username, userId, authId, socket)
}else{sails.log.warn("Z.associateSocket: a socket attempted to associate itself without being logged in")}
},
}
在我的 config / sockets.js
中onConnect: function(session, socket) {
Z.associateSocket(session,socket)
if (session.user && session.user.auth){
sails.log("config/sockets.js: "+session.user.auth.username+" CONNECT! session:",session)
}else sails.log.warn('connect called on socket without an auth, the client thinks it already has a session, so we need to fix this')
// By default, do nothing.
},
然后你可以在你的服务文件中添加一些函数来根据用户名和密码进行查找,删除断开连接的套接字等(我现在正在使用waterlock进行身份验证,尽管辩论交换机回到帆-生成-AUTH)
答案 1 :(得分:0)
从onConnect
删除config/sockets.js
和双重连接功能。