Dydaktyka:
FeedbackMetoda 1: (do użycia tylko jeśli rozmiar wiadomości jest wysyłany na początku lub jest z góry znany)
Metoda 2:
Zmieniając wiadomości (struktury / obiekty w języku programowania) w dane do wysłania w sieć (ciąg bajtów) (=serializacja) i na odwrót (=deserializacja), można:
Zwykle przygotowując ręcznie funkcję serializującą / deserializującą wiadomość:
Metoda 1:
Metoda 2:
Do oceny przy wysyłaniu czy połączenie zostało zerwane można sprawdzić:
write()
(trzeba go wcześniej zapisać)Zadanie 1. W plikach ctr_srv.cpp i ctr_cli.cpp znajduje się odpowiednio serwer i przykładowy klient usługi 'licznika'.
main()
w serwerze i przetestuj program netcatemmain()
i doWork()
klienta. Jakiego stanu licznika spodziewałby się naiwny programista po przerwaniu programu klienta?read()
. Popraw kod.Przy programach nie wymagających wysokiej wydajności zwykle szuka się rozwiązań wymagających jak najmniej czasu od programisty - czyli szuka się bibliotek które robią większość rzeczy za programistę.
Dla osiągnięcia wysokiej wydajności zaleca się korzystanie z wydajnych, zwykle niskopoziomowych mechanizmów - albo bezpośrednio, albo za pomocą bibliotek nastawionych na wydajność (a nie wygodę użytkownika). Takie biblioteki są dostępne na różnym poziome abstrakcji, porównaj np. boost asio i libevent). Wysokowydajne mechanizmy niskopoziomowe to:
Wiele usług sieciowych korzysta z ustandaryzowanych protokołów wymiany wiadomości, np. REST czy SOAP
Dostępnych też jest wiele middleware (warstw pośredniczących) które pozwalają programiście używać sieci bez pisania kodu obsługującego sieć, np:
Często w komunikacji sieciowej korzysta się z dodatkowych warstw abstrakcji między TCP a wiadomościami aplikacyjnymi do osiągnięcia:
Aplikacje korzystające z sieci powinny dodatkowo zostać przetestowane pod kątem: