Avatar billede iluka Nybegynder
04. juli 2006 - 21:16 Der er 3 kommentarer og
1 løsning

FTP arkitektur

Hej Eksperter

Jeg sidder og roder med et sommerferieprojekt, for at lære lidt om FTP.

Jeg har lavet en lille klient, der kan det mest basale, men jeg er rendt ind i et par problemer, der er af mere arkitekturmæssig karakter:

Som udgangspunkt er kommunikationen mellem klient og server bygget op omkring "forespørgsel -> svar". Altså klienten sender f.eks. et CDUP (change directory up) og serveren svarer tilbage om resultatet. Det betyder at man som udgangspunkt kan forudsige hvad der kommer, og hvor meget. Problemerne opstår når i to situationer:
a) Serveren sender et "421 No-transfer-time exceeded. Closing control connection.". Her er der ikke gået en forespørgsel forud, hvorfor klienten ikke kan forudsige at 421 kommer. Hvis klienten så i samme øjeblik har sendt et CDUP får den altså et uvendtet svar, og hvis klienten ikke har sendt en forespørgsel er den ikke klar til at læse.
b) Data (f.eks. filer) overføres af en tråd, for at klienten ikke skal "hænge" medens filen overføres. Når overførslen er overstået sendes et "226 transfer complete" på kontrolforbindelsen. Det betyder at det er uforudsigeligt hvilke svar man får på en forespørgsel, da der kan snige sig et 226 ind midt i det hele. Alternativt kan filoverførseltråden selv læse den næste linie, men så risikerer man at man snupper resultatet af CDUP i stedet for 226.

Hmm håber i kan følge mig

Problemet er altså at finde en arkitektur som sikrer at alle svar bliver læst, både dem der er forventede og dem som ikke er, samt at den der sender en forespørgsel får det rigtige svar.

Jeg har tænkt på at lave en tråd der foretager al læsninge, og så raiser en event hvis den får en 421, og "ligger 226 til side". Problemet er at jeg ikke lige umidelbart kan finde en metode hvorpå man kan forespørge en stream om der er data på den. Derfor får jeg en tråd der kan gå i deadlock, hvilket jeg ikke ønsker.

Altså tanken er:
main tråd der primært laver UI, og forespørgsler
1 kontrolstream readertråd der læser alt og ligger resultater i en buffer
en række datareader/writer streams der overfører data.

Jeg har brug for indput!

Egentligt kan jeg opsumere:
Hvilken arkitektur understøtter muligheden for sideløbende dataoverførsler samtidig med forespørgsler/respons på kontrolstreamen, uden at der går synkroniserings skruder-muder i det hele :)
Avatar billede arne_v Ekspert
05. juli 2006 - 01:26 #1
hvorfor tror du at de fleste FTP clienter blocker indtil en fil overførsel
er færdig ?

:-)

FTP protokollen er slem

umiddelbart tror jeg at bedste strategi vil være:
  - have noget per outstanding handling
  - have noget som læser responses fra control connection
  - de første subscriber til den anden for svar
  - den anden publisher svar til alle
  - de første ignorerer kode som de ved ikke er relevante for dem

("noget" er formentligt tråde)
Avatar billede arne_v Ekspert
13. august 2006 - 22:57 #2
kommet videre ?
Avatar billede iluka Nybegynder
20. august 2006 - 22:38 #3
fik desværre andre mere præserende opgaver på nakken (takket være et travlt arbejde, og en strid kone) så jeg har ikke haft tid.

Du får points for de gode råd hvis du smider et svar.
Avatar billede arne_v Ekspert
21. august 2006 - 00:01 #4
ok

PS: pas på ikke konen læser hvad du skriver !!!!  :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester