PDA

Visualizza la versione completa : [Delphi] Problema Server/Client HTTP


Jey
29-04-2014, 10:51
Buongiorno a tutti,
un po' che sto cercando di risolvere un problema dal quale non riesco a uscirne :dh:
Il mio obbiettivo creare un server HTTP in delphi che mi invii l'immagine di una termocamera al quale connesso l'applicativo stesso.

Il tutto sembra funzionare, ma dopo un po' il server o, solitamente, il client crasha ( va in not responding )

Facendo qualche check ho notato che ogni mia richiesta al server apre una porta che rimane in TIME_WAIT per un certo periodo prima di chiudersi e non vorrei che questo possa causare problemi.
Come posso risolverlo?

http://oi57.tinypic.com/2ui9ctv.jpg



Per fare dei test ho fatto anche un semplice server che ad ogni richiesta di get mi restituisce sempre la stessa immagine e una pagina html che a timer richiede quest'ultima ed il risultato sono questi errori ( lato client... Lato server 0 errori, ero in debug ).
Controllando con netstat anche in questo caso mi rimangono porte aperte.

http://oi61.tinypic.com/jqonrt.jpg



Se vi pu essere utile, vi allego anche sorgente del server e pagina html di esempio per cercare di capire dove sbaglio :dh:
L'immagine che sto utilizzando questa: http://oi57.tinypic.com/2e3yao4.jpg

alka
29-04-2014, 11:07
Ho fatto una prova con il codice che hai scritto e - almeno per quanto riguarda la parte di restituzione dell'immagine dal server - a me sembra che funzioni correttamente (vedo l'immagine che ho usato come esempio per il download dal server).

Hai verificato di non aver scelto una immagine con un formato anomalo o con errori? Magari prova con un'altra.

In alternativa, incolla direttamente nella barra degli indirizzi del browser l'URL con cui scarichi l'immagine (poich non sempre possibile accedere a un dominio differente da un altro dominio dell'applicazione, e in certi casi per i file in locale l'accesso alla rete inibito).

In merito al problema delle miriadi di porte aperte, non capisco se queste sono riferite al tuo server oppure a un'altra applicazione o connessione. Nell'esempio che hai fornito, non riscontro questo problema.

Ciao! :bye:

Jey
29-04-2014, 11:19
No ma anche io con il browser vedo correttamente l'immagine, solo che ogni tanto mi da quell'errore l il browser e visivamente vedi l'immagine che per un istante scompare ( pagina bianca ). :confused:

Per le porte aperte a me succede sia con il mio server per la telecamera che con l'esempio dell'allegato ( apro la pagina con firefox... non so se cambi qualcosa ).
L'immagine che ho messa prima erano alcune delle porte che sono rimaste aperte dopo neanche un minuto che ho aperto la pagina html :dh:

Il fatto che io passi da un proxy pu essere un motivo?

alka
29-04-2014, 11:22
No ma anche io con il browser vedo correttamente l'immagine, solo che ogni tanto mi da quell'errore l il browser e visivamente vedi l'immagine che per un istante scompare ( pagina bianca ). :confused:

Il problema pu essere legato all'accesso multithreading al file o a un problema di connessione di diverso tipo.



Per le porte aperte a me succede sia con il mio server per la telecamera che con l'esempio dell'allegato ( apro la pagina con firefox... non so se cambi qualcosa ).
[...]
Il fatto che io passi da un proxy pu essere un motivo?
Sicuramente pu influire. Fai una prova in locale, avviando la tua applicazione e usando localhost come indirizzo per verificare se i problemi permangono. Se non noti nulla di particolare, allora il proxy a bloccare o intervenire in qualche modo sulle richieste e lo scambio di dati.

Ciao! :ciauz:

Jey
29-04-2014, 11:39
Ho provato a non passare dal proxy ed il risultato questo:

http://oi59.tinypic.com/adfaft.jpg

A qusto punto il pc che ce l'ha con me :fighet:
Che poi con questo esempio starei teoricamente andando a 10 frame al secondo ( 1 richiesta ogni 100ms )... Col server della telecamera devo poter andare fino a 120 frame :dh:

denis76
29-04-2014, 15:50
L'oggetto TJPEGImage poi lo deallochi?

Jey
29-04-2014, 17:05
Si, nel server della termocamera elimino tutto.
In quello che ho fatto d'esempio me ne sono scordato :D

Comunque, anche deallocando la jpeg nel server d'esempio, il risultato non cambia :bh:

Cambia per nel momento in cui setto a 0 la property 'TerminateWaitTime' dell'http server.
Cos sembra chiudere tutto subito :mem:
Ricordo di averla impostata a 1 per test ma il risultato non cambiava... 0 gli piace decisamente di pi :confused:

Ora devo capire perch crasha il client delphi...
Faccio qualche test e aggiorno a breve, intanto grazie a tutti dell'aiuto!

denis76
29-04-2014, 17:56
Sei sicuro di non avere qualche altro memory leak in giro? Uso quel componente da anni in programmi attivi 7 giorni su 7 e problemi mai avuti.

Jey
29-04-2014, 18:10
Certo, anche perch non si blocca praticamente mai il server... E' il client che scoppia ma non per problemi di memoria, quella rimane costante:bh:

Il mio unico dubbio che il client rimanga bloccato, per qualche motivo, nella chiamata Get... Per quel che so, e potrei sbagliarmi, la Get fatta in un timer bloccante finch non viene completata e se per qualche motivo il server non mi risponde io sono bloccato... Ma perch non dovrebbe rispondere? :confused:

Jey
30-04-2014, 10:14
Buongiorno a tutti, ho fatto una piccola modifica al server in modo che generasse lui un'immagine senza doverne caricare da file e ho anche fatto un piccolo client per ricevere le immagini.

Non ho ancora testato abbastanza il client per vedere se crasha anche questo, ma ho visto che il comportamento lo stesso: miriadi di porte in TIME_WAIT ( cosa che non succede se ottengo l'immagine da browser ) :dh:

Consigli?

Loading