2015-02-26 2 views
0

В настоящее время я начал использовать sailsJS с angularJs в интерфейсе alognwith для обмена в реальном времени.список подключенных пользователей в гнездах парусов

Sailsjs предоставляет встроенную поддержку websocket через «sails.io.js». На стороне клиента после добавления этой библиотеки этот код добавляется в контроллер часовых углов.

стороны клиент код

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. 
}) 

Infact очень новой для парусов, поэтому я хочу предложение о том, как сохранить список подключенного пользователя, так как м не используется Redis в качестве хранилища purpose.adapter является memory.array не является хорошим потому что он исчезнет при перезапуске сервера.m, используя версию парусов 0.11.0.

thanx заранее.

ответ

1

Я несколько новых, но быстро учится, эти предложения должны получить вас там, если кто-то не отвечает величию ...

Они изменили его в 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

в версии 0.11 перед соединением вместо onConnect в соответствии с руководством по миграции. Но он не работает во время работы onConnect, несмотря на то, что вы даете ошибку или устареваете. Как ни странно, в этот момент onConnect вызывается перед входом в систему, когда im работает с токенами, которые созданный после аутентификации.поэтому m вызывает действие _chatController's_ и передает токен в параметре queryz. –

+0

Да, это точно. Итак, вы решили свою проблему? Или еще нужно больше информации? – zabaat

+0

все еще нужна информация cz Мне не удалось настроить эти события, поэтому m использует маршруты ocntroller вместо этих встроенных функций. –

0

Снимите и функцию разъединения от config/sockets.js.

Смежные вопросы