Russian Qt Forum
Май 08, 2024, 22:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Возможен ли FullDuplex для QHttp ?  (Прочитано 5974 раз)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« : Март 04, 2009, 15:00 »

Доброго всем здравия!

Собственно вопрос: возможно ли как-то "смастерить" FullDuplex для Http протокола , в частности для QHttp ?

очень нужно, чтобы "сервер" сам мог в любое время слать "клиенту" запросы!
т.е работа такая к примеру:
1. клиент подключается к серверу и шлет ему запрос
2. сервер ему отвечает
3. СОЕДИНЕНИЕ НЕ РВЕТСЯ!!!!
4. сервер в какой то момент времени шлет клиенту запрос
5. клиент отвечает
6. СОЕДИНЕНИЕ НЕ РВЕТСЯ!

т.е нужно чтобы канал всегда оставался открытым!
Записан

ArchLinux x86_64 / Win10 64 bit
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #1 : Март 04, 2009, 16:44 »

Помоему это противоречит принципу http протокола: запрос - ответ.
Реализовать можно - только клиента и сервер будете писать вы.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #2 : Март 04, 2009, 16:54 »

т.е сам клиент должен выступать в роли сервера?
Записан

ArchLinux x86_64 / Win10 64 bit
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #3 : Март 04, 2009, 18:23 »

ага
обычно такое делаю на xml
туда - сюда его гоняют)
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #4 : Март 05, 2009, 08:26 »

Так значит нужно иметь (создавать) дополнительный порт для обратки?

т.е в одну сторону допустим порт 8080, в другую 8081... не хотелось бы добавлять лишнюю сущьность ... Грустный

Записан

ArchLinux x86_64 / Win10 64 bit
Mixolap
Гость
« Ответ #5 : Март 09, 2009, 23:10 »

ну если СОЕДИНЕНИЕ НЕ РВЕТСЯ, то одного порта достаточно должно быть, если конечно сам сервер не будет инициализировать подключения к клиенту (то есть без обмена ролями).
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #6 : Март 10, 2009, 08:49 »

Я чего спросил, потому что непонятно как ведет себя QHttp после вызова:
Код:
int QHttp::request ( const QHttpRequestHeader & header, QIODevice * data = 0, QIODevice * to = 0 )

и получения ответа:
Код:
void QHttp::responseHeaderReceived ( const QHttpResponseHeader & resp )  [signal]

т.е непонятно:
1. при вызове request (в случае когда клиент уже подключен к серверу) - запрос пройдет?
2. происходит ли автоматически disconnect от сервера, когда данные от сервера приняты?

вот эти два момента в работе класса QHttp меня оч интересуют!

Записан

ArchLinux x86_64 / Win10 64 bit
sendevent
Гость
« Ответ #7 : Март 10, 2009, 12:16 »

если я правильно понимаю, одно из отличий хттп 1.1 от 1.0 - возможность установки "длительного" соединения, т.е. коннект устанавливается 1 раз, а не для каждого запроса. при этом время жизни соединения задается полем Keep-Alive, но потрогать не доводилось.

1. не совсем понятно - а чего ему не пройти? или речь идет не о клиентском (QHttp::)request'е?
2. при исопльзовании 1.0 (тот же мыло.ру) stateChanged( 0 ) приходит примерно через минуту после приема последних данных - возможно, это связано с сокетными таймаутами локальной ОС, но подозреваю - конфигурацией сервера.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #8 : Март 10, 2009, 14:07 »

Цитировать
1. не совсем понятно - а чего ему не пройти? или речь идет не о клиентском (QHttp::)request'е?
я может неправильно выразился.. имеется ввиду, посылается ли "connect" при запросе, т.е если гипотетически имеем в данный момент CONNECT к серверу, то  проверяется ли уже существующий CONNECT при реквесте? или как-то вот так то непонятно как?? Улыбающийся
Цитировать
2. при исопльзовании 1.0 (тот же мыло.ру) stateChanged( 0 ) приходит примерно через минуту после приема последних данных - возможно, это связано с сокетными таймаутами локальной ОС, но подозреваю - конфигурацией сервера.
так непонятно, а какую версию протокола использует QHttp ?

--

мне нужно будет реализовать используя библиотеку qxml-rpc (а как известно этот протокол через HTTP реализован) полнодуплексный обмен данными между клиентом и сервером, при этом подразумевается, что соединение должно поддерживаться постоянно!

т.е чтобы не только клиент-серверу мог слать запросы, но и сервер клиенту мог послать сам (спонтанно, при условии что клиент еще подключен) некие запросы!!!!
 
Записан

ArchLinux x86_64 / Win10 64 bit
sendevent
Гость
« Ответ #9 : Март 10, 2009, 18:18 »

1: если QHttp::state == QHttp::Unconnected то запрос не будет отправлен, и вроде не автоконнектится, надо QHttp::setHost делать. когда же коннект установлен - как тролли проверяют и проверяют ли - не задавался подобным вопросом Улыбающийся
2: QHttp понимает обе, указание исопльзуемой версии - это уже из нотации самого хттп, задается в QHttpRequestHeader:
Цитировать
QHttpRequestHeader::QHttpRequestHeader ( const QString & method, const QString & path, int majorVer = 1, int minorVer = 1 )
Constructs a HTTP request header for the method method, the request-URI path and the protocol-version majorVer and minorVer. The path argument must be properly encoded for an HTTP request.
как видно, дефолтом используется хттп 1.1.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.054 секунд. Запросов: 23.