Вверх ↑
Этот топик читают: Гость
Ответов: 655
Рейтинг: 18
#1: 2014-10-25 05:40:50 ЛС | профиль | цитата
Добрый день!

Делаю на базе TCPServerEx web сервер, есть пару вопросов по подключениям:

TCPServerEX создает экземпляр мультика при подключении клиента и удаляе его при отключении.
Допустим мы запросили с сервера html страничку, на страничке есть ссылки на скрипты, стили, картинки. Браузер создает кучу коннектов к серверу дабы быстрее скачать все необходимые файлы указанные на странице.

Пытаюсь в одном соединении выдать все файлы страницы:

Указываю дополнительный заголовок keep-alive: timeout=10,max=100 http://tools.ietf.org/id/draft-thomson-hybi-http-timeout-01.html - тут сказано что он как раз это позволяет, в итоге при загрузке страницы с 6 скриптамиcss и прочим создается 6 экземпляров мультика TCPServerEx....при закрытии браузера экземпляры не удаляются.

Куда копать?
карма: 0

0
Ответов: 1343
Рейтинг: 31
#2: 2014-10-25 12:27:10 ЛС | профиль | цитата
Gunnman писал(а):
.при закрытии браузера экземпляры не удаляются.

Куда копать?


Определяем работоспособность конекта внутри каждого мультика далее через точку выхода мультика с индексом события, в поток заносим индекс мультика и уничтожаем его через ##delete (ПОСЛЕ ПРОВЕРКИ РАБОТОСПОСОБНОСТИ НА ВСЯКИЙ ПОЖАРНЫЙ НАДО ОСТАНАВЛИВАТЬ ВСЮ СХЕМУ МУЛЬТИКА, ИЛИ ДЕЛАТЬ СРАЗУ ТАК ЧТО БЫ ПРИ ДИСКОНЕКТЕ ВСЕ ОСТАНАВЛИВАЛОСЬ)

------------ Дoбавленo в 12.27:
Вот пример жёсткого авто-удаления мультика по окончании работы, тоесть в данном случаи после дисконнекта клиента

Add(MainForm,2953706,21,105)
{
link(onCreate,4253097:##open,[])
}
Add(TCP_ServerEx,4253097,154,119)
{
ServerPort=25500
link(onDisconnect,9797696:doData,[])
}
BEGIN_SDK
Add(EditMultiEx,8456107,21,21)
{
WorkCount=#6:##open|9:##hdelete|
EventCount=#12:onDisconnect|
VarCount=#13:##eventHandle|7:##count|
Point(##hdelete)
Point(##eventHandle)
Point(##count)
}
Add(TCP_Connection,10013821,70,77)
{
link(onDisconnect,8456107:onDisconnect,[(212,97)(212,27)])
}
END_SDK
Add(Memory,3987875,238,119)
{
link(onData,65928:doDeferredEvent,[])
}
Add(DoData,7734232,105,126)
{
link(onEventData,4253097:##hdelete,[])
link(Data,3987875:Value,[(111,106)(321,106)(321,163)(244,163)])
}
Add(DoData,9797696,196,119)
{
link(onEventData,3987875:doValue,[])
link(Data,4253097:##eventHandle,[(202,101)(326,101)(326,167)(160,167)])
}
Add(Label,14929789,161,182)
{
Left=20
Top=15
link(Text,4253097:##count,[])
}
Add(Timer,10244693,105,182)
{
link(onTimer,14929789:doText,[])
}
Add(MultiElementEx,1926001,203,259)
{
Mode=1
}
BEGIN_SDK
Add(EditMultiEx,6535698,21,21)
{
WorkCount=#5:##add|7:##clear|
Point(##add)
Point(##clear)
link(##add,1313933:doOpen,[(67,27)(67,55)])
}
Add(TCP_Client,1313933,112,49)
{
Port=25500
IP="127.0.0.1"
}
END_SDK
Add(Button,11476766,105,231)
{
Left=15
Top=45
Caption="on"
link(onClick,11960045:doTimer,[])
}
Add(Button,16529826,105,266)
{
Left=15
Top=85
Caption="clear"
link(onClick,1926001:##clear,[])
}
Add(Timer,11960045,154,231)
{
Interval=20
Enable=1
AutoStop=200
link(onTimer,1926001:##add,[(194,237)(194,265)])
}
Add(DeferredEvent,65928,280,119)
{
link(onDeferredEvent,7734232:doData,[(333,125)(333,95)(93,95)(93,132)])
}
карма: 2

0
Гость
Ответов: 17029
Рейтинг: 0
#3: 2014-10-25 19:19:52 правка | ЛС | профиль | цитата


Редактировалось 4 раз(а), последний 2025-01-09 23:45:18
карма: 0

0
Ответов: 2125
Рейтинг: 159
#4: 2014-10-27 18:39:58 ЛС | профиль | цитата
109.235.188.9 писал(а):
в итоге получается что он делает 6 запросов к TCPServerEX...а тот в свою очередь делает 5 экземпляров схемы.

Я для файлов *.js,*.css указываю в заголовке Connection: close , т.к после выдачи файла браузеру коннект держать не имеет смысла, а для *.html файлов указываю Connection: Keep-Alive

Всё правильно. Сначала грузится html, соединение не разрывается, затем грузится что-либо из *.js,*.css после чего соединение разрывается, как ты и хотел. Остальное грузится в отдельном соединении, если это не html.
карма: 1

0
Ответов: 1343
Рейтинг: 31
#5: 2014-10-27 20:04:09 ЛС | профиль | цитата
Впринципе суть понятна, не происходит дисконнекта при передаче файлов, а значит нам надо сделать то что будет информировать нас о ЗАВЕРШЕНИИ ПЕРЕДАЧИ ОТВЕТА, и по этому тут либо использовать альтернативные компоненты TCP (в которых есть точка onSend), либо вот так попробовать(на простых компонентах работает, а вот на счёт TCP не знаю, попробуй ):

code_34507.txt
карма: 2

0
файлы: 1code_34507.txt [2.5KB] [201]
5
Сообщение
...
Прикрепленные файлы
(файлы не залиты)