Wpis z mikrobloga

Mirki, potrzebuje pomocy z #python, a dokladniej #programowanie sieciowe: skrypt (po stronie klienta) tworzy mi pewien plik co konkretny odstep czasu (np. 15 sekund). Chce przeslac ten plik do serwera (#!$%@? caly czas). Tworze gniazda i nawiazuje polaczenie (bind, listen, connect), dane przesylam funkcja sendall() po stronie klienta, po stronie serwera odbieram funkcja recv() z ustawionym rozmiarem bufora. Podczas gdy stworzy sie 20 plikow po stronie klienta, skrypty nie nadazaja z wysylaniem/odbieraniem (chociaz zajmuja one od 1000 do 3000 bajtow). Po stronie serwera jest ich 6-8. Trace okolo 2/3 plikow. Dodam, ze korzystam z biblioteki socket.

Moge wprowadzic potwierdzenia, zeby dopiero wtedy byl przesylany kolejny plik - ale nie o to chodzi. Potrzebuje biezacych danych. Jak przyspieszyc przesylanie malych plikow tekstowych przez sockety? Dzieki za odpowiedz!
  • 5
Im szybciej beda na serwerze tym lepiej, zeby nie bylo zbytniego opoznienia ;) Odstep czasu moze byc wydluzony poprzez parametr wywolania skryptu, np. do 60 sekund, ale wtedy pliki beda wypelnione danymi z 60 sekund (czyli zalozmy, ze nasze rozmiary powieksza sie srednio czterokrotnie). Ciezko okreslic min/avg/max rozmiar na sztywno w aplikacji, bo chce zostawic uzytkownikom pelna dowolnosc wyboru odstepu czasu.
@bob9876: Nie musisz robić bind i listen, jeżeli robisz connect.
Która strona zamyka połączenie?
Czy serwer po zamknięciu połączenia zamyka wszystkie sockety i zaczyna wszystko od nowa (tzn. socket->bind->listen->accept) czy po prostu wraca do listen?
@natjes: To bylo uogolnienie - po stronie klienta jest connect(), a po stronie serwera bind(), listen() i accept() :)
Polaczenie zamyka klient, serwer po prostu "idzie spac i sie budzi", po czym przyjmuje kolejne polaczenie gdy otrzyma komunikat "get file name" lub "get_file" od klienta.
@bob9876: Pierwszą myślą był TIME_WAIT po zamknięciu połączenia, ale skoro robisz to po stronie klienta to raczej nie to. Jeżeli dasz radę sobie wyświetlić return code i errno po wywołaniach funkcji to na pewno ułatwi to sprawę.