Задать вопрос

Что нужно знать при написании мессенжера на node.js?

Не так давно знаком с node.js и websockets. Пишу серверную часть приложения типа мессенжера в процедурном стиле, все события повесил на case, какие могут подводные камни при таком подходе? Нужен ли синглтон при работе с бд (node-mysql)? Как try/catch может сказаться на производительности? Какие меры безопасности необходимо принять при работе с сокетами?

если что вот кусок кода:

case 101: 
 try {
  var to = parseInt(json.to);
  var from = parseInt(json.from);
   db.query('SELECT MAX(id) AS max_id FROM messages WHERE `to` = '+to+' AND `from` = '+from+';', function(err, result, fields) {
    var res = {
      id: (result[0].max_id + 1),
      to: to,
      from: from
    };
        var jsonSend = JSON.stringify(res);
              try { users[from].send(jsonSend); } catch (e) { console.log('MAX ID FROM ERROR'); }
         });
           }
              catch (e) {
                  console.log('101 error');
                  return;
               }
 break
  • Вопрос задан
  • 4040 просмотров
Подписаться 4 Оценить 1 комментарий
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
вот зачем брать асинхронный функциональный (все же это так) язык программирования и писать на нем такой вот шлак?

switch/case это дурной тон. Есть конечно варианты при которых без этого никак, но явно не в вашей задаче.

Используйте deferred объекты что бы убрать мешанину из каллбэков.

Сделайте отдельную функцию провайдер данных и вынесите из этого треша SQL. У вас тут нету классов, по сему нету и сингелтонов. Просто отдельный метод провайдер, причем он так же должен быть асинхронным.

Сделайте обертки вокруг сокетов внутри которых уже обрабатывайте исключения что бы ваш контроллер не распухал от количество try/catch блоков, ну и опять же используйте deferred объекты. Например библиотеку Q
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы