Стоит задача сделать внутрикорпоративный мессенгер, аналог icq.
Сразу хочу предупредить - о jabber и др. готовых решения знаю. По некоторым причинам - нужно написать свой.
Будет база под MS SQL 2008 R2, где хранится список пользователей, история сообщений и др. логи.
Собственно вопрос вот в чем. Каким образом клиенту лучше получать сообщения?
1. Самый простой способ. Прямое подключение к базе (через ADO), клиент периодически опрашивает базу о наличии полученных сообщений. При отправке сообщения вызывается процедура в базе, сохраняющая сообщение в очереди.
Как мне кажется, минус в том, что будет сильно загружена база (и сервер).
2. Реализовать промежуточный сервер приложений, обрабатывающий запросы от клиентов.
На чем тогда его делать, с помощью Socket?
И будет ли выигрыш по загрузке базы -сомнительно.
3. Хотелось бы, чтобы клиент получал сообщения от сервера (push), а не опрашивал сервер периодически. Возможно ли такое или это получится доп. дыра к компу клиента?
Какая технология?
4. Как это реализовано в существующих решениях (icq, jabber и т.п.)?
Сразу хочу предупредить - о jabber и др. готовых решения знаю. По некоторым причинам - нужно написать свой.
Будет база под MS SQL 2008 R2, где хранится список пользователей, история сообщений и др. логи.
Собственно вопрос вот в чем. Каким образом клиенту лучше получать сообщения?
1. Самый простой способ. Прямое подключение к базе (через ADO), клиент периодически опрашивает базу о наличии полученных сообщений. При отправке сообщения вызывается процедура в базе, сохраняющая сообщение в очереди.
Как мне кажется, минус в том, что будет сильно загружена база (и сервер).
2. Реализовать промежуточный сервер приложений, обрабатывающий запросы от клиентов.
На чем тогда его делать, с помощью Socket?
И будет ли выигрыш по загрузке базы -сомнительно.
3. Хотелось бы, чтобы клиент получал сообщения от сервера (push), а не опрашивал сервер периодически. Возможно ли такое или это получится доп. дыра к компу клиента?
Какая технология?
4. Как это реализовано в существующих решениях (icq, jabber и т.п.)?