Прослушиватель WebSocket для базы данных Microsoft SQL

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

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

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

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

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

Edit 1:

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

Ситуация 1

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

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

Ситуация 2:

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

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

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

5
задан Ruben Homs 20 December 2011 в 12:15
поделиться