|
UTL_TCP
|
|||
---|---|---|---|
#18+
Кто-нибудь использовал модуль UTL_TCP? У меня каждый раз творятся чудеса. У меня стоит Oracle9i (скаченный с сайта Oracle, знаю, что там не идеальный вариант, но все-таки рабочий!?) на SlackWare 8.0. Вначале решил использовать переменную в пакедже для хранения идентификатора TCP соединения. Все процедурки и функции использовали ее и были счастливы. После перезагрузки сервера работающий ранее код на PL/SQL кричал: NOT CONNECTED TO NETWORK и переменная оказалась пустой. При использовании замечательной функции SYS.UTL_TCP.WRITE_LINE(<connection>, <data> на сервере написанном на Delfi возникало событие вовсе не OnClientRead, а onClientWrite и Socket.ReceivedText содержал-таки переданный пакет. После все той же перезагрузки Oracle9i на TCP сервере после посылки пакета возникало-таки событие OnClientRead, но Socket.ReceivedText ничего в себе не содержало. Обидно, но почитав внимательно описание SYS.UTL_TCP накопал процедуру SYS.UTL_TCP.FLUSH(connection). После этого пакет успешно отправлялся Oracle9i на TCP сервер. Вопрос в том, что такая непредсказуемость абсолютно не желательна, потому как будущий продукт, постоенный на UTL_TCP представляет большую важность заведению, где я работаю . Да, сейчас мы на тестовой платформе настроим эти вещи, но есть ли гарантия, что там не откроются еще какие-либо глюки? Помогите разобраться. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2002, 21:44 |
|
UTL_TCP
|
|||
---|---|---|---|
#18+
Месье SAA_! По-моему, все ваши проблемы в недопонимании того, как работать с сокетами вообще, и UTL_TCP с Delphi в частности. Почему не испрользовать pull технологию, когда программа на Delphi забирает данные с сервера, а не сервер пытается их активно "впихнуть" (push) клиенту. Отметим сразу же, что использование UTL_TCP поверх неустойчивых линков (в частности, между сегментами разделёнными не слишком (или чересчур слишком ) интелектуальным файерволом) крайне не рекомендуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2002, 22:21 |
|
UTL_TCP
|
|||
---|---|---|---|
#18+
Суть проблемы очень ясна. Нужно мне TCP соединение и все тут, хоть убей. На самом деле пакет описан, но вот после очередной загрузки проблемы не повторялись. Разве что пакеты не отправлялись сразу, но и это оказалось разрешимым. SYS.UTL_TCP.OPEN_CONNECTION - открытие TCP соединения SYS.UTL_TCP.WRITE_LINE - запись данных в TCP соединение SYS.UTL_TCP.FLUSH - отправка буферированных данных TCP соединения SYS.UTL_TCP.AVAILABLE - проверка пришедших данных с TCP соединения SYS.UTL_TCP.READ_LINE - чтение данных из TCP соединения SYS.UTL_TCP.CLOSE_CONNECTION - закрытие TCP соединения Вот и были мы сильно удевлены тем, что Delfi странно реагирует на пришедшие пакеты, отосланные при помощи UTL_TCP. Склонен думать, что это связано с FLUSH (его я вначале не делал, а при закрытии соединения сие чудо скорее всего вызывалось). На данный момент глюков нет, а мой опыт можно использовать в своих личных изысканиях в этой области. Кстати, этим соединениям абсолютно наплевать на то, что соединение не отзывается по тайм-ауту и фаервол не способен его обрубить, как скажем, это происходит с соединениями Oracle. Интересно, а можно ли Oracle Net Client & Server научить не закрывать соединение при кратковременном обрыве связи? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2002, 23:26 |
|
UTL_TCP
|
|||
---|---|---|---|
#18+
Месье SAA_! Учите матчасть -- в RFC по TCP очень хорошо описано, при каких условиях соединение должно закрываться аварийно: "падение интерфейса" (да и то не всегда), "получение пакета с левым SYN", "получение пакета, требуещего сброса соединения" (reset) и "неполучение пакета в течении условного тайм-аута, но только при условии, что мы этот пакет ждём". Таким образом, соединение спокойно переживает падение ISP на 10 минут, если данные по нему не бегают, и не переживает перетыкание проводов из одной дырки хаба в другую. ЗЫ. Шифрующий (crypto) или транслирующий (маскарад, NAT) файервол, после перезагрузки обычно не может вспомнить какой был номер у последнего пакета, что приводит к сбросу всех соединений вообще. С обычным рутером или файерволом (т.е. только фильтр пакетов по определённым правилам) после перезагрузки оного все транзитные соединения, как правило, остаются живыми. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2002, 22:12 |
|
|
start [/forum/topic.php?fid=52&fpage=2848&tid=1993355]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 267ms |
total: | 405ms |
0 / 0 |