Посоветуйте стабильный компонент для клиент-серверной программы

  • Автор темы eXpressionist
  • Дата начала
E

eXpressionist

#1
Доброго времени, уважаемые!

Пишу программу, от которой требуется быть очень надежным чатом. То есть передаются и принимаются лишь строчки с текстом, которые прога расшифровывает и выполняет команды.
В данный момент работает на стандартных TClientSocket и TServerSocket в D7. Вся сетевая часть взята на основе статьи Многопользовательский чат Delphi, за небольшими изменениями.
В сети сервер и 4 компа - один во внешке, два по VPN и один по локалке.
Происходит такое, что порой то отваливаются клиенты, то - самое важное - не доходят сообщения до сервера даже по локалке, причем иногда из 6 сообщений приходит первое и последнее, а промежуточные теряются.

Может эти сокеты глючные? Если менять, то главный критерий выбора компонента - быстрая портация существующей сетевой части..

Собственно, прошу совета - либо какой компонент выбрать, либо как модернизировать существующую прогу, чтобы повысить стабильность.
 

vital

Больной Компом Детектед
29.01.2006
2 432
33
#2
сообщений приходит первое и последнее, а промежуточные теряются.
Это беда никак не компонентов, а самой программы. Это первое.

Второе.
Вместо устареших компонентов используйте компоненты от Indy 9

Третье.
Хотите полной уверенности - пишите всю работу сокетом руками, благо, не так и сложно.
 
E

eXpressionist

#3
Не исключаю, разумеется, и косяков программы. Изначально все работало более-менее стабильно, и вот последнее время после переделки сети пошли глюки.

Согласно вышеуказанной статье, серверный таймер работает вот так:
Код:
If ServerSocket.Socket.ActiveConnections<>0 then
Begin
For i:=1 to ServerSocket.Socket.ActiveConnections do
Begin
txt:=ServerSocket.Socket.Connections[i-1].ReceiveText();
If txt<>'' then
Begin
com:=StrToInt(Copy(txt,1,1));
len:=Length(txt)-1;
Case com of
и в кейсе в зависимости от первого символа выполняет некие условия.. пробовал таймер менять и на 200, и на 100 - не приносит пользы.

Инди компонент попробую, нашел какой-то исходник, поглядим..

Руками через Winsock API? Почитал статейку - мне пока такое не по зубам. По крайней мере, в короткие сроки, в которые необходимо пофиксить указанную софтину..
 

vital

Больной Компом Детектед
29.01.2006
2 432
33
#4
Может конечно я не прав, но по-моему, та реализация чата по вашей статье - это полный п*здец.

http://code.progler.ru/tags/Delphi,%D0%A7%D0%B0%D1%82 смотрели тут примеры?

Мне дико не нравится таймер на сервере. Бред какой-то.
 
E

eXpressionist

#5
vital
вы правы) просто это было лучшее из доступного.

за ссылочку спасибо, оценю.

таймер на сервере мне уже ТОЖЕ не нравится, с появлением жалоб, растущих по экспоненте.
 

vital

Больной Компом Детектед
29.01.2006
2 432
33
#6
я хоть убейте не понимаю зачем. просто на onclientread рассылайте всем клиентам сообщения. Если делать это не на онклиентрид, а по таймеру, то вы как минимум будете терять сообщения. Жалобы вроде бы в этом, да?)
 
E

eXpressionist

#7
vital
если не ошибаюсь, OnRead и OnWrite работают только при ThreadBlocking типе сервера, а у меня NonBlocking.
хотя, ошибаюсь. попробую перенести.

изменил.. поглядим, как прибавит стабильности.

p.s. спасибо за совет, думаю что все-таки будет лучше. а то уже пару месяцев с прогой сношаюсь, но на такой момент, как ненужность таймера, внимания не обращал.
 
E

eXpressionist

#8
И все-таки не помогло, сегодня опять жаловались и жаловались.. И опять по локалке пропадает..
Попробую сделать три сокета - один на список контактов, другой на чат, третий на служебные цели
 

vital

Больной Компом Детектед
29.01.2006
2 432
33
#9
а пропадают точно из-за программы? мб блочит что-то в сети? поэксперементируйте. найдите закономерность когда пропадают. Рандомно не может быть.
 
M
#10
> серверный таймер работает

За каким лешим он там сдался, таймер этот ?

События OnClientRead/Write для Пушкина сделаны ?
 
E

eXpressionist

#11
mss
уже перенес. а OnClientWrite вообще не нужен, по крайней мере в моем случае.

vital
что может блочить мне трудно сказать. сервер стоит на Kerio (порты расшарены). и главное, что в течение дня, без каких-либо смен настроек, могут мессаги пропадать.