Предложения по написанию системы обмена сообщениями TCP IP (клиент / сервер) с использованием Delphi 2010

Я хотел бы написать систему обмена сообщениями с использованием TCP IP в Delphi 2010. Я хотел бы услышать, какие у меня лучшие варианты использования для этого стандартных компонентов delphi 2010 / компонентов indy.

Я хотел бы написать сервер, который будет прослушивать и пересылать сообщения на все машины в сети, на которых работает клиент.

1.) a.) Клиенты могут отправлять сообщение на сервер для пересылки всем другим клиентам b.) Клиенты прослушивают сообщения от других отправителей (через сервер) и отображают сообщения.

2.) а.) Сервер может отправлять сообщения всем клиентам б.) Сервер пересылает любые сообщения от клиентов всем другим клиентам

спасибо за любые предложения

ПРИМЕЧАНИЕ. Я не пишу программу для обмена мгновенными сообщениями или чата. Это просто система, в которой пользователи могут отправлять предупреждения / сообщения другим пользователям - они не могут отвечать друг другу! НИКАКИХ коммерческих, условно-бесплатных и т.п. ссылок - пожалуйста! Я хотел бы услышать о том, как вы подойдете к написанию системы такого типа и какие подходы вы выберете, и, возможно, архитектуру обмена сообщениями TCP IP, которую вы бы использовали. Будь то прям Winows API, компоненты Indy и тд и тп.


person IElite    schedule 23.12.2010    source источник
comment
Похоже на многоадресную рассылку IP   -  person Kenneth Cochran    schedule 23.12.2010
comment
ПРИМЕЧАНИЕ. Я не пишу программу для обмена мгновенными сообщениями или чата. Это просто система, в которой пользователи могут отправлять предупреждения / сообщения другим пользователям - они не могут отвечать друг другу! НИКАКИХ коммерческих, условно-бесплатных и т.п. ссылок - пожалуйста! Я хотел бы услышать о том, как вы подойдете к написанию системы такого типа и какие подходы вы выберете, и, возможно, архитектуру обмена сообщениями TCP IP, которую вы бы использовали. Будь то прям Winows API, компоненты Indy и тд и тп.   -  person IElite    schedule 23.12.2010
comment
@Shane Я переместил вашу заметку в вопрос, где ее следует указать (а не в комментариях).   -  person Eugene Mayevski 'Callback    schedule 24.12.2010
comment
Всем спасибо за ответы! Итак, что вы все думаете об использовании indy, например, в этой демонстрации: indy10clieservr.sourceforge.net ИЛИ используя пакеты TServerSocket и TClientSocket ?????   -  person IElite    schedule 27.12.2010
comment
@Shane TClientSocket и TServerSocket устарели и устарели. Indy был взят на замену. Если вы планируете долгосрочный проект, я бы посоветовал самому создать простые оболочки для Winsock. Это не так сложно, и вы не зависите от стороннего кода сомнительного качества.   -  person Eugene Mayevski 'Callback    schedule 27.12.2010
comment
@codeelegance: Это так, и я думаю, что это то, что я искал. Вы много знаете о реализации этого в Indy с использованием компонента TIdIPMCastClient / Server? Я думал, что это может быть сделано с Инди, и я просто жду, чтобы кто-нибудь подскажет мне лучшее направление. Если у вас есть что предложить, напишите в ответ - спасибо!   -  person IElite    schedule 27.12.2010
comment
Извините, я знаком с концепцией многоадресной рассылки IP, но никогда не пытался ее реализовать (поэтому я не пытался ответить на вопрос напрямую). К сожалению, многоадресная IP-рассылка не гарантирует доставку пакетов. PGM работает, но пока что экспериментальный. С этим может справиться любое количество ESB, но это может быть излишним.   -  person Kenneth Cochran    schedule 28.12.2010


Ответы (6)


Если это только Windows, и вы не хотите использовать сторонние библиотеки, вы можете пропустить TCP / IP и перейти к Почтовые ящики.

Изменить: если вам нужна гарантированная доставка, лучшим решением будут именованные каналы. Этот SO вопрос имеет несколько красиво отвечает с примерами именованных каналов Delphi.

почтовый ящик - это механизм одностороннего межпроцессного взаимодействия (IPC). Приложения могут хранить сообщения в почтовом ящике. Владелец почтового ящика может получать сообщения, которые там хранятся. Эти сообщения обычно отправляются по сети либо на указанный компьютер, либо на все компьютеры в указанном домене. Домен - это группа рабочих станций и серверов, имеющих общее имя группы.

Им не нужен домен Windows, они работают по локальной сети.

DelphiPages имеет приятный подробное описание выполнения IPC в Delphi, включая почтовые ящики.

- Джерун

person Jeroen Wiert Pluimers    schedule 24.12.2010
comment
Почтовые ящики не гарантируют доставку и имеют некоторые другие побочные эффекты, поэтому они не лучший вариант. В случае OP это механизм claer pub-sub с выделенным сервером, и TCP будет работать нормально. Тем не менее, правильный pub-sub с сериализацией сообщений и т. Д. - нетривиальная задача. - person Eugene Mayevski 'Callback; 24.12.2010
comment
спасибо за замечание; Я добавил часть именованных каналов из-за этого. - person Jeroen Wiert Pluimers; 24.12.2010

Если вы хотите сэкономить немного времени и использовать готовое решение:

в указанном выше порядке. Последние два приведены скорее в ознакомительных целях.

IMO 0MQ лучше всего - он продуман, легкий, быстрый и надежный.

person g2mk    schedule 09.11.2011

Похоже на обмен сообщениями "публикация-подписка". Его предлагает kbmMW.

person Eugene Mayevski 'Callback    schedule 23.12.2010
comment
Я хотел бы написать это сам, как я сказал в своем вопросе, вместо того, чтобы полагаться на коммерческие компоненты. Я не совсем уверен, что предложенный вами набор будет делать то, что я хочу, - хотя спасибо за ответ - person IElite; 23.12.2010
comment
@Shane написать систему - это довольно широкое словосочетание. Насчет kbmMW - реально проверяли? ЕСЛИ вы собираетесь написать свой собственный, то успешная реализация будет для вас отличным примером для начала. - person Eugene Mayevski 'Callback; 24.12.2010

Есть клиент мгновенных сообщений от Aid Aim: http://www.aidaim.com/products/msgcommunicator/manual_instant-messaging-im-sdk/index.php

person Darian Miller    schedule 23.12.2010
comment
извините, на самом деле я не ищу обмена мгновенными сообщениями или болтовни. Я ищу систему оповещения / обмена сообщениями (которую я могу построить с помощью tcp ip). Чтобы предупредить пользователей о важных сообщениях. - person IElite; 23.12.2010
comment
Я должен упомянуть систему, в которой пользователи не могут отвечать друг другу! - person IElite; 24.12.2010
comment
@Darian Miller Я уже установил msgcommunicator v11 для своего delphi XE8. Я хочу сделать чат клиент / сервер через Интернет. Мне нравится этот компонент, но в сети я не смог найти пример для клиента / сервера, понятия не имею, как его использовать? не могли бы вы предоставить мне простой пример для клиента / сервера msgcommunicator. Заранее спасибо! - person Alex Kirov; 29.03.2017
comment
@AlexKirov извините, я не знаю. Это было давно - если бы они не оказывали поддержку в наши дни, я бы не стал их использовать. Возможно, попробуйте: imcomponents.com/ivc.htm - person Darian Miller; 30.03.2017

Об использовании indy, например, в этой демонстрации: indy10clieservr.sourceforge.net ИЛИ с использованием пакетов TServerSocket и TClientSocket

-> теперь с демонстрационным образцом x64 из INDY

person FranzB    schedule 08.11.2011

Чтобы заставить это работать надежно, требуется больше усилий, чем вы думаете - около 5% усилий, чтобы заставить его работать, и 95% усилий, чтобы убедиться, что он работает при любых обстоятельствах, включая отключение сети и т. Д. Если вы перейдете сюда (http://www.csinnovations.com/framework_delphi.htm) вы можете увидеть, как я реализовал свои межпроцессные коммуникации рамки. Материал TCP включает около 10 000 строк кода, использующего компоненты Indy.

person Misha    schedule 24.12.2010