В настоящее время я работаю над проектом, который должен использовать WebSockets как способ передачи данных моему клиенту. Инфраструктура выглядит следующим образом.
Клиент -> Веб-сервер -> База данных Microsoft SQL
Я думаю, что самая идеальная ситуация была бы такой:
Клиент открывает сокет для Сервера.
Сервер открывает сокет для базы данных Microsoft SQL.
Всякий раз, когда база данных обновляется (некоторые данные были вставлены), БД записывает данные в сокет.
Сервер записывает данные обратно клиенту.
Это может быть немного утомительно, хотя, может быть, я могу как-то открыть сокет для БД от клиента напрямую?
Я хочу знать, есть ли способ автоматически уведомлять сокет на веб-сервере, если база данных MSSQL обновлена, чтобы он мог обрабатывать эту информацию.
Главный вопрос действительно; как я сделаю эту работу? Я рассмотрел некоторые проекты, которые работают с WebSockets, такие как Node.JS и Socket.IO, а также Tornado. Хотя я не нашел никаких подсказок относительно того, где искать эту особенность. Я нашел несколько довольно нестабильных драйверов для баз данных MSSQL для NodeJS, но не понимаю, есть ли способ сделать сокет для БД и мгновенно отправить данные через сокет, когда он закачан в базу данных.
Я также понимаю, что создание сокета между клиентом и базой данных было бы неразумно, если говорить о наименьшей безопасности, поскольку на данный момент это не проблема, и SQL не подходит для приложений реального времени, но я привязан к этому сейчас:)
Редактировать 1:
Благодаря @tomfanning я теперь знаю решение этой проблемы, но серьезно сомневаюсь в улучшении производительности. Позвольте мне представить ситуацию для вас. В случае, если бы я использовал Trigger для базы данных MSSQL, я представляю, что это происходит.
Ситуация 1
- База данных обновляется
- Спусковой крючок нажат
- Сценарий CLR устанавливает соединение с веб-сервером. Либо через
сокет, который он должен открывать и закрывать для каждого триггера или через
запрос HTTP (S), который включает в себя открытие и закрытие заголовка (который
бесполезно накладные расходы)
- Веб-сервер получает триггер и передает данные в
клиент.
- Клиент обновляет.
А теперь представьте тот же сценарий, но затем с AJAX
Ситуация 2:
- В клиенте для запросов AJAX установлено время ожидания 1000 мс
- Время ожидания клиента истекло и он выполняет запрос AJAX
- База данных выполняет некоторый запрос и отправляет обратно результат
- Клиент обновляет.
В ситуации 1 вам нужен запрос и сокет emit / receive, а в ситуации 2 вам нужен только один запрос. Если бы я установил тайм-аут AJAX-запроса на 10MS, показался бы он пользователю, как если бы это было приложение реального времени, например, веб-сокет? Или ситуация 1 будет еще более эффективной, и я просто преувеличиваю?
Заранее спасибо!