Я несколько новых, но быстро учится, эти предложения должны получить вас там, если кто-то не отвечает величию ...
Они изменили его в 11, но в 10.5 я использую sockets.js в папке конфигурации и connect Я храню данные сеанса в массиве со своим сокетом. Я создал службу в API/службе, которая содержит функцию ассоциирования массива и сокета.
Для v11 вы не можете сделать это точно так же, но вы можете сделать свой первый «привет» от клиента вызовом функции в контроллере, который вызывает функцию ассоциирования.
Несколько советов будет не позволить клиенту просто сказать вам, кто они, как не просто взять имя пользователя из Params, но получить его от req.session
(Это предполагает, что вы пользователь настройки аутентификации)
в моем случае я в апи/услуги/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")}
},
}
в моем конфигурации/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.
},
Затем вы можете добавить некоторые функции в файл услуг, чтобы сделать Lookups на основе имени пользователя и пароля, снимите разъемы, которые отключив и т.п. (I» м с использованием водяного замка для моего авторизации в настоящий момент, хотя обсуждение перехода обратно на паруса-генерация-auth)
в версии 0.11 перед соединением вместо onConnect в соответствии с руководством по миграции. Но он не работает во время работы onConnect, несмотря на то, что вы даете ошибку или устареваете. Как ни странно, в этот момент onConnect вызывается перед входом в систему, когда im работает с токенами, которые созданный после аутентификации.поэтому m вызывает действие _chatController's_ и передает токен в параметре queryz. –
Да, это точно. Итак, вы решили свою проблему? Или еще нужно больше информации? – zabaat
все еще нужна информация cz Мне не удалось настроить эти события, поэтому m использует маршруты ocntroller вместо этих встроенных функций. –