|
|
|
TServerSocket и TService
|
|||
|---|---|---|---|
|
#18+
oklalex, или наследовать свой класс потоков, который при создании нового потока будет передавать переменную Loop = False Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2019, 16:48 |
|
||
|
TServerSocket и TService
|
|||
|---|---|---|---|
|
#18+
oklalexИ тут есть очень сильная хотелка - как бы так "собрать" это сообщение в первом вызове OnExecute(), зациклив проверку буфера? Просто встань на место сервера и посмотри на сообщение с его т.зр. Как ему определить, что клиент отстрелялся с данными? Либо длина в заголовке, либо сигнатура окончания. Можно еще по таймауту ждать, но это ламерство. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2019, 17:06 |
|
||
|
TServerSocket и TService
|
|||
|---|---|---|---|
|
#18+
Можно весь сеанс обмена с сервером организовать в рамках одного вызова OnExecute. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2019, 17:14 |
|
||
|
TServerSocket и TService
|
|||
|---|---|---|---|
|
#18+
Друзья, всем огромное спасибо за внимание и идеи. Прошу прощения, что сразу не ответил. Проблема решилась, перенес на Indy, в который раз убеждаюсь, что это очень продуманная вещь. Вкратце - проблему нашел и тут выше ее уже примерно озвучивали - множество соединений висит в состоянии Time_Wait, обычный TServerSocket это не переваривает, они "висят вечно" и в итоге все останавливается. При большой нагрузке очень быстро. При переносе на Indy сделал ручную проверку, живое ли соединение, и если нет, отключаю. Кстати, у Indy и на этот счет есть штатное решение - SetKeepAliveValues(). Все принимается в одном вызове OnExecute(), спасибо DmSer огромное за то, что навели на правильную идею и привели прототипы необходимых функций. При желании, можно 100% подобное реализовать и с TServerSocket, но уже не стал заморачиваться и строить велосипеды ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2019, 22:01 |
|
||
|
TServerSocket и TService
|
|||
|---|---|---|---|
|
#18+
Василий 2oklalexИ тут есть очень сильная хотелка - как бы так "собрать" это сообщение в первом вызове OnExecute(), зациклив проверку буфера? Просто встань на место сервера и посмотри на сообщение с его т.зр. Как ему определить, что клиент отстрелялся с данными? Либо длина в заголовке, либо сигнатура окончания. Можно еще по таймауту ждать, но это ламерство. Согласен полностью, если бы так было сделано - эта тема бы не возникла ) но клиенты многие написаны не мной и так, как Господь на душу положит ( поэтому пришлось подстроить таймауты и работать в условиях тех ограничений, в которые поставлен ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2019, 22:07 |
|
||
|
|

start [/forum/topic.php?fid=58&gotonew=1&tid=2038959]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
156ms |
get topic data: |
6ms |
get first new msg: |
4ms |
get forum data: |
2ms |
get page messages: |
25ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 426ms |

| 0 / 0 |
