我有点新,但学得很快,这些建议应该能让你到达那里,除非其他人的反应很棒......
他们在 11 中对其进行了更改,但在 10.5 中,我在 config 文件夹中使用了 sockets.js,并在连接时将会话数据与他们的套接字一起存储在一个数组中。
我在 APIs/service 中创建了一个包含数组和套接字关联函数的服务。
对于 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.
},
然后您可以在您的服务文件中添加一些功能以根据用户名和密码进行查找,删除断开连接的套接字等(我目前正在使用水锁进行身份验证,尽管正在讨论切换回帆-生成-身份验证)