Tino Fourie Ответов: 3

Самая простая система обмена сообщениями для отправки простых текстовых сообщений


В рамках проекта, над которым я работаю, что бы вы считали самой базовой платформой для отправки и получения простых текстовых сообщений в приложении Windows Forms.

То, что я планирую реализовать, - это использовать одну таблицу в БД MySql, записывать в нее как отправленные, так и полученные сообщения. Помните, что это простые текстовые сообщения длиной не более 150 символов.

Я использую 2 столбца, чтобы различать отправителя и получателя. При получении "моих" сообщений, конечно, здесь я смотрю как на столбцы отправителя, так и на столбцы получателя для моего usrID. Оттуда я могу затем разделить сообщения между моими отправленными сообщениями и полученными сообщениями.

Какие подводные камни вы видите, как бы вы подошли к этому или как бы вы улучшили его.

Помните: только простые текстовые сообщения.

С уважением,
Т

PS: на случай, если вам интересно, почему я утруждаю себя изобретением базового колеса и не использую существующие приложения (электронная почта или Skype и т. д.)... Я работаю в среде, где один пользователь может иметь до 8-10 открытых приложений только для того, чтобы иметь возможность выполнять свою обычную работу. В некоторых случаях пользователи используют до 12 приложений. Я работаю над тем, чтобы сократить это по крайней мере на 5 приложений в рамках моего проекта.

Что я уже пробовал:

Как было подробно объяснено выше, как видно из моего вопроса. (30 символов-это очень много для ввода)

3 Ответов

Рейтинг:
21

MadMyche

Это не так сложно, как вы думаете; в конце концов, это просто простые операторы INSERT и SELECT. Хитрая часть попадает в реализацию; особенно в части мгновенного извлечения.
Некоторые методы, которые были сделаны за последние 20 лет, - это циклическое "чтение" новых сообщений по таймеру или использование COMET (он же обратный AJAX). С HTML5 теперь у вас есть WebSockets как достойное обновление для этого.

Вплоть до 2015 года чат Facebook был основан на протоколе XMPP, который является открытым исходным кодом и доступен по API. Существуют автономные серверные пакеты, и несколько почтовых серверов имеют его встроенный (например, SmarterMail).


Tino Fourie

Привет, Мадмыч, спасибо за Ваш вклад.
Я использую BackgroundWorker для выполнения цикла. Я использую приложение Win Forms, но не хочу вводить в него HTML в данный момент, так как WebBrowser является родным для IE7, и вам нужно немного поработать, чтобы заставить его обрабатывать HTML-страницу для более ранней версии IE, например: Edge, IE11, IE10 и т. д.

Я только что закончил раздел, где мне нужно было использовать StringBuilder для сборки HTML-страницы, а затем отправить ее в элемент управления WebBrowser (я не хочу иметь HTML-страницу вне приложения). Вы, вероятно, можете себе представить, какие усилия требуются для создания HTML-кода внутри приложения Win Forms.

Рейтинг:
2

Richard MacCutchan

Я не специалист по БД, но у меня было бы искушение иметь три таблицы. Один для пользователя, один для отправленных сообщений и один для полученных. Все сообщения имеют ключ userid (один из столбцов пользователя), поэтому связать их все вместе должно быть легко.


Tino Fourie

Привет, Ричард Маккатчан, спасибо вам за Ваш вклад.

Увы, сначала я пошел с 2 таблицами: одна для SentMsgs, а другая для RecvMsgs. Я передумал, потому что это было бы бессмысленно, честно говоря, потому что обе таблицы были бы 100% дубликатом другой, потому что они хранят одни и те же данные, за исключением SenderId и RecipientId.

Вы можете возразить, что обработка 10 000 msgs займет больше времени (условно говоря ofc), чем обработка, скажем, 1000 сообщений. Это сильный аргумент в среде, где вы не можете контролировать возраст сообщений. Однако я рассматриваю возможность удаления сообщений старше 21 дня (3 недели). Не уверен, насколько хорошо это будет воспринято.... но опять же, используйте вместо этого свою электронную почту.

Рейтинг:
0

W.G.C.

Your initial solution seems viable.  I would add a timestamp column to allow selecting messages.  The simplest implementation (unless I am missing something) would be a table with five columns.

 MessageID
 MessageText
 SenderID
 ReceiverID
 TimeStamp

If not using a notification system, polling for new messages could be done using a short time delay if the application is in the foreground (e.g., 3 seconds) and longer if not (e.g., 10 seconds).


Tino Fourie

Привет, ОГК, приношу свои извинения за поздний ответ.

Я полностью согласен с вашим предложением о внедрении поля временных меток. В моем подходе у меня есть такое поле, специально используемое для BackGroundWorker при получении сообщений. Я установил BackGroundWorker для извлечения сообщений каждые 5 секунд, что означает, что моя процедура MySQL Stores будет искать только сообщения, которые на 5000 мс моложе, чем сейчас().

Спасибо за ваш ответ.