Слушатель WebSocket для базы данных Microsoft SQL - PullRequest
5 голосов
/ 20 декабря 2011

В настоящее время я работаю над проектом, который должен использовать WebSockets как способ передачи данных моему клиенту. Инфраструктура выглядит следующим образом.
Клиент -> Веб-сервер -> База данных Microsoft SQL

Я думаю, что самая идеальная ситуация была бы такой: Клиент открывает сокет для Сервера. Сервер открывает сокет для базы данных Microsoft SQL. Всякий раз, когда база данных обновляется (некоторые данные были вставлены), БД записывает данные в сокет. Сервер записывает данные обратно клиенту. Это может быть немного утомительно, хотя, может быть, я могу как-то открыть сокет для БД от клиента напрямую?

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

Главный вопрос действительно; как я сделаю эту работу? Я рассмотрел некоторые проекты, которые работают с WebSockets, такие как Node.JS и Socket.IO, а также Tornado. Хотя я не нашел никаких подсказок относительно того, где искать эту особенность. Я нашел несколько довольно нестабильных драйверов для баз данных MSSQL для NodeJS, но не понимаю, есть ли способ сделать сокет для БД и мгновенно отправить данные через сокет, когда он закачан в базу данных.

Я также понимаю, что создание сокета между клиентом и базой данных было бы неразумно, если говорить о наименьшей безопасности, поскольку на данный момент это не проблема, и SQL не подходит для приложений реального времени, но я привязан к этому сейчас:)

Редактировать 1:

Благодаря @tomfanning я теперь знаю решение этой проблемы, но серьезно сомневаюсь в улучшении производительности. Позвольте мне представить ситуацию для вас. В случае, если бы я использовал Trigger для базы данных MSSQL, я представляю, что это происходит.

Ситуация 1

  1. База данных обновляется
  2. Спусковой крючок нажат
  3. Сценарий CLR устанавливает соединение с веб-сервером. Либо через сокет, который он должен открывать и закрывать для каждого триггера или через запрос HTTP (S), который включает в себя открытие и закрытие заголовка (который бесполезно накладные расходы)
  4. Веб-сервер получает триггер и передает данные в клиент.
  5. Клиент обновляет.

А теперь представьте тот же сценарий, но затем с AJAX

Ситуация 2:

  1. В клиенте для запросов AJAX установлено время ожидания 1000 мс
  2. Время ожидания клиента истекло и он выполняет запрос AJAX
  3. База данных выполняет некоторый запрос и отправляет обратно результат
  4. Клиент обновляет.

В ситуации 1 вам нужен запрос и сокет emit / receive, а в ситуации 2 вам нужен только один запрос. Если бы я установил тайм-аут AJAX-запроса на 10MS, показался бы он пользователю, как если бы это было приложение реального времени, например, веб-сокет? Или ситуация 1 будет еще более эффективной, и я просто преувеличиваю?

Заранее спасибо!

1 Ответ

3 голосов
/ 20 декабря 2011

Возможное решение может быть Триггеры T-SQL на INSERT или UPDATE с процедурой CLR , которая отправляет некоторое уведомление вашему основному приложению, которое затем откачивает данные вашему клиенту через веб-сокеты , Избегал бы необходимости опрашивать базу данных.

За ваш комментарий - не уверен, как AJAX поможет вам конкретно в этом случае - потому что, будучи технологией, основанной на клиенте (браузере), вашим решением снова будет опрос, который, как я понимаю, вы хотите избежать. Похоже, что WebSockets здесь подходит, потому что он дает вам возможность совершать «толчок» с сервера на клиент без опроса.

Очевидно, я говорю здесь в очень общих и теоретических терминах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...