MVC / websockets в node.js - PullRequest
       18

MVC / websockets в node.js

0 голосов
/ 01 декабря 2011

Я думаю о создании приложений для интрасети, которые используют веб-сокеты.В настоящее время я использую Python / Pylons для своей веб-инфраструктуры на сервере и выполняю опросы для обновления элементов в DOM страницы.Пилоны плохо подходят для связи с веб-сокетами (IMHO), так как для каждого соединения используется поток.Я рассматриваю возможность использования node.js в качестве сервера для связи с соединениями веб-сокетов из моего веб-приложения.Вот "мое представление в 10 000 футов" моего приложения:

  • Pylons предоставляет веб-контент (html, css, изображения, javascript и т. Д.)
  • JavasSript на странице открывает приложениеwebsocket (s) на сервер node.js
  • Сервер node.js передает данные в приложение через websocket
  • JavaScript обновляет элементы DOM страницы на основе данных из websocket

Данные в приведенном выше случае взяты из базы данных MySQL, откуда мой вопрос.Я уже настраивал приложения типа MVC и могу делать то же самое в файле node.js.Тем не менее, если у меня есть долгоживущий веб-сокет, открытый для сервера node.js, как node.js узнает об изменениях в модели и отправляет их в приложение?Например, если я хочу обновить итоги, представленные на странице веб-приложения, и эти итоги изменяются из-за действий в системе вне node.js (других веб-приложений), как node.js уведомляется об этих изменениях?Что приходит на ум, это сделать так, чтобы node.js опрашивал базу данных на предмет различных изменений и распространял изменения в различных представлениях.Но для меня это звучит так, как будто я перемещаю свой опрос из веб-приложения на сервер node.js?

У кого-нибудь есть какие-либо идеи, предложения или указания по этому поводу?

Заранее спасибо!Дуг

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

Вы можете либо:

  • Позволить сценариям Python уведомлять приложение node.js (через сокет или через HTTP)
  • Или опросить из node.js, посколькузнать об изменениях за пределами своей среды

Опрос считается плохим, потому что он не масштабируется.При наличии одного процесса, который опрашивает, масштабируется, потому что ему не нужно больше подключений, когда подключается другой пользователь.Итак, в основном:

// query every second or so
setInterval(function () {
    // query database
    doSomeDatabaseStuff(function (res) {
        // check dirty
        if (res.changed) {
             // notify all clients
             allConnectedSockets.forEach(function (socket) {
                 socket.send({ msg: "update" });
             });
        }
    })
}, 1000);

Таким образом, у вас есть один процесс, опрашивающий базу данных, и масштабируемая архитектура для уведомления ваших подключенных клиентов.База данных все еще может быть заполнена из любого источника.

0 голосов
/ 08 октября 2012

Sails.js - это инфраструктура MVC для узла, которая обладает уникальным отличием RESTful-маршрутизации сообщений Socket.io так же, как ваши экспресс-маршруты.

В настоящее время Sails использует Sequelize и по умолчанию настроен на использование mySQL (но также поддерживает SQLite и Postgres). Мы переключаемся на модель, которая позволяет вам выбирать свой собственный ORM, который позволит нам поддерживать JugglingDB (который, помимо прочего, добавляет поддержку Mongo)

Он также поставляется в комплекте с интерфейсным компонентом Mast. Mast предоставляет функциональность, аналогичную Meteor, в том смысле, что он позволяет напрямую общаться с базой данных с клиента. Если вам необходимо предоставить более сложные функции, просто добавьте контроллер на серверную часть.

Подробнее здесь: https://github.com/balderdashy/sails

...