Нужно знать кое-что о socket.io, redis и nginx.

Моя цель - создать приложение для чата, похожее на WhatsApp.

Насколько я понимаю, socket.io — это коммуникационная библиотека в реальном времени, написанная на javascript, и она очень проста в использовании.

Например

 // Serverside
    io.on('connection', function(socket) {
        socket.on('chat', function(msg) {
            io.emit('chat', msg);
      });
    });

 // ClientSide (Using jquery)

   var socket = io();
  $('form').submit(function(){
    socket.emit('chat', $('#m').val());
    $('#m').val('');
    return false;
  });

  socket.on('chat', function(msg){
    $('#messages').append($('<li>').text(msg));
  });

1) мне всегда нужно запускать io.on('connection'), чтобы использовать функцию реального времени, или я мог бы просто начать использовать вместо этого объект socket.on? например у меня есть маршрут

app.post('/postSomething', function(req, res) {
    // Do i need to start an io.on or socket.on here?

});

потому что я хочу, чтобы функция реального времени прослушивалась только на определенном маршруте.

2) Redis — это библиотека структур данных, которая обрабатывает pub/sub, зачем нам использовать механизм pub/sub? Я прочитал много статей, но не мог понять концепцию. Пример статьи http://ejosh.co/de/2015/01/node-js-socket-io-and-redis-intermediate-tutorial-server-side/

например код ниже

// Do i need redis for this, if so why? is it for caching purposes?
// Where does redis fit in this code?


 var redis = require("redis");
 var client = redis.createClient();


 io.on('connection', function(socket) {
     socket.on('chat', function(msg) {
          io.emit('chat', msg);
      }); 
  });

3) Просто интересно, зачем мне нужен nginx для масштабирования приложения node.js? я нашел этот ответ stackoverflow: Стратегия реализации масштабируемого чат-сервера

В нем что-то говорится о балансировке нагрузки, читал это в Интернете и тоже не мог понять концепцию.

До сих пор я имел дело только с node.js, простым CRUD-приложением mongoose, но я готов очень усердно работать, если вы, ребята, поделитесь некоторыми своими знаниями и некоторыми полезными ресурсами, чтобы я мог углубить свои знания обо всех этих технологии.

Ваше здоровье!


person Jack Moscovi    schedule 04.09.2015    source источник
comment
У вас есть 3 вопроса; разместите их как три отдельных вопроса о переполнении стека, это поможет вам получить ответы   -  person Basit Anwer    schedule 05.09.2015
comment
@BasitAnwer причина, по которой я задаю все в одном вопросе, потому что мне приходится ждать 90 минут на каждый вопрос   -  person Jack Moscovi    schedule 05.09.2015
comment
@BasitAnwer, если бы вы могли мне помочь и ответить на вопрос, это было бы очень полезно   -  person Jack Moscovi    schedule 05.09.2015
comment
Ответил; но, пожалуйста, воздержитесь от этого. Если кто-то знает ответ на 2 из 3 вопросов, он / она может не решиться ответить на ваш полный вопрос, плюс это противоречит правилам SO.   -  person Basit Anwer    schedule 05.09.2015


Ответы (1)


В. Socket.on без IO.on

io.on("connection" ... )

Вызывается при получении нового соединения. Socket.on прослушивает все эмиты на стороне клиента. Если вы хотите, чтобы ваш клиент по какой-то причине действовал как сервер, тогда (вкратце) да io.on требуется

В. Публикация/подписка Redis против Socket.IO

Взгляните на этот вопрос SO/ ответ, цитирование;

Redis pub/sub отлично подходит, если у всех клиентов есть прямой доступ к Redis. Если у вас есть несколько узловых серверов, один из них может отправить сообщение другим.

Но если у вас также есть клиенты в браузере, вам нужно что-то еще для передачи данных с сервера клиенту, и в этом случае socket.io отлично подходит.

Теперь, если вы используете socket.io с хранилищем Redis, socket.io будет использовать Redis pub/sub под капотом для распространения сообщений между серверами, а серверы будут распространять сообщения клиентам.

Таким образом, использование комнат socket.io с socket.io, настроенным с хранилищем Redis, вероятно, будет самым простым для вас.

Redis может действовать как очередь сообщений, если это необходимо. Redis — это хранилище данных, поддерживающее множество типов данных.

В. Почему Nginx с Node.js

Node.js может работать автономно, но nginx быстрее обрабатывает статический контент.

Поскольку nginx является обратным прокси-сервером, серверы настроены с помощью nginx для обработки всех статических данных (обслуживание статических файлов, выполнение перенаправлений, обработка SSL-сертификатов и обслуживание страниц ошибок), а все остальные запросы отправляются на node.js.

Также проверьте этот пост Quora: Должен ли я размещать проект node.js без nginx? Цитата:

Nginx можно использовать для снятия некоторой нагрузки с процессов Node.js, например, обслуживания статических файлов, выполнения перенаправлений, обработки SSL-сертификатов и обслуживания страниц ошибок.

Вы можете делать все без Nginx, но это означает, что вам нужно написать код самостоятельно, так почему бы не использовать для этого быстрое и проверенное решение.

person Basit Anwer    schedule 05.09.2015