2015-10-24 4 views
1

Я использую NodeJS, socket.io и express для создания приложения, и мне интересно, как определить, какой сокет (id/user) находится на каком маршрутизаторе? Например, у меня 10 пользователей на моем сайте, и у меня есть 3 маршрута:/home,/about,/contact. Как узнать, какой пользователь находится на маршрутизаторе?Узел js несколько маршрутов get socket

+0

вы также использовать что-то вроде (Socket.io паспорта), чтобы связать пользователя в Expres s сеанс с Socket.io? потому что это будет тема сама по себе – laggingreflex

+0

В настоящее время я изучаю, как работает все «javascript на сервере» (node.js). У меня есть php-фон, и я не так много знаю об этом. Да, я слышал о паспорт.js, но пока не знаю, как он работает. Мне нужна регистрация/логин на моем сайте, но я еще не знаю, как я это сделаю, и что такое «лучшая» практика. –

+0

checkout обновленный ответ, надеюсь, он поможет – laggingreflex

ответ

1

Во-первых, чтобы знать «какого пользователя», вам понадобится система с сеансами и куки-файлы, чтобы идентифицировать конкретного пользователя каждый раз, когда они делают другой запрос. Passport.JS делает это очень просто.

Во-вторых, чтобы разделить одного и того же пользователя между экспресс-маршрутом, а обработчик Socket.io потребует обмена информацией о сеансе между ними. Для Passport.js есть socket.io-passport, который делает это.

Наконец, когда на стороне клиента Socket.io инициирует запрос на подключение к серверу, io.connect() он устанавливает ссылающейся заголовок запроса к текущему URL, которые могут быть доступны на стороне сервера с socket.request.headers.referer

со всеми что на месте вы, наконец, быть в состоянии сказать, какой пользователь на какой маршрут:

app.get('/about', function(req, res, next){ 
    // req.user is on '/about' path 
}); 
var URL = require('url'); 
io.on('connection', function(socket) { 
    var user = socket.request.user; 
    var path = URL.parse(socket.request.headers.referer).path; 
    // user is on -> path 
}); 
+0

Я бы дал вам несколько upvotes, но я могу только один. :) Спасибо за ваш обновленный ответ! Пожалуйста, проверьте мои другие вопросы node.js :) –

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