Worldmaster Temat założony przez niniejszego użytkownika |
Serwer C++ - problem » 2018-05-19 21:48:38 Muszę zrobić serwer w C++ do aplikacji typu google docs, tylko uboższej. Zastanawiałem się jak to wszystko powiązać i od czego zacząć. Muszę używać "gołych socketów" , czytałem że jest problem jeśli będę chciał skomunikować aplikację webową z tym serwerem. Nie proszę o napisanie kodu, tylko o wskazówki od doświadczonych programistów :) Z góry wielki dzięki :) |
|
jankowalski25 |
» 2018-05-19 23:45:55 Możesz zacząć od prostego serwera opartego o SFML Network. Jeśli potrzebujesz działać bezpośrednio na gniazdach, to może się przydać Kurs WinSock, C++ (chociaż w tym przypadku lepiej zajrzeć do angielskiej wersji, tutejsza jest trochę przestarzała, zwłaszcza jeśli na przykład potrzebujesz IPv6). Jeśli to ma być wygodne, to pewnie i tak utworzysz sobie jakieś klasy do tego, a SFML może być całkiem niezłym punktem wyjścia (zresztą nawet nie musisz budować wszystkich modułów, do obsługi sieci wystarczy samo Network i System). Co do komunikacji z innymi aplikacjami, to pisząc "serwer" zwykle obsługujesz każdego jako "klienta" i to powinno wystarczyć. Jeśli przesyłane komunikaty będą zgodne z jakimś formatem, to nie powinno być tutaj większych problemów. Sama obsługa formatów *.doc i innych to już nieco inny problem, możesz zacząć od czegoś prostego, choćby od edytora HTML i stopniowo to rozwijać. Można również poszukać innych bibliotek, które obsłużą poszczególne formaty. |
|
Worldmaster Temat założony przez niniejszego użytkownika |
» 2018-05-19 23:49:33 Okej, dzięki wielkie. Zastanawiałem się też jak synchronizować zmiany między serwerem a klientami, tak żeby każda zmiana wprowadzana przez klienta była widziana przez innego? |
|
jankowalski25 |
» 2018-05-19 23:55:38 W najprostszym z możliwych przypadków nie masz żadnych "wiszących" połączeń ( "Connection: close" w nagłówkach HTTP) i wtedy jak masz żądanie, to serwer wysyła konkretnemu klientowi aktualną wersję strony. Najpierw zacznij od czegoś takiego, dorobienie połączeń "keep-alive" wymaga nieco więcej zabawy (chociaż z grubsza sprowadza się do tego, że jak ktoś coś zmieni, to serwer informuje każdego klienta, że nastąpiła zmiana). |
|
Worldmaster Temat założony przez niniejszego użytkownika |
» 2018-05-19 23:58:01 czyli rozumiem że cały tekst wprowadzony przez klientów przechowywać w jakimś kontenerze i za każdym razem przesyłać cały kontener do każdego klienta na nowo? |
|
jankowalski25 |
» 2018-05-20 00:05:26 Nie cały, odpowiadasz na żądanie pokazując tyle, ile sobie ustalisz. Na przykład na tym forum jak wejdziesz w jakiś temat, to widzisz osiem postów na stronę. Nie otrzymujesz za każdym żądaniem zrzutu wszystkich postów z całego forum. Jak masz jakiś dokument, choćby *.doc, to pewnie jest jakoś podzielony (na przykład na strony). Przesyłasz to, co się zmieniło, ewentualnie przy dłuższym przesyłaniu dajesz jakiś "progress bar", żeby klient widział, że dane się ładują. Ustalasz jakieś limity tak, aby to było wygodne i aby program klienta się nie zawieszał przy każdym kliknięciu.
Dopisano: Zwróć również uwagę na to, że tak naprawdę jeśli masz dużo danych, to człowiek nie ogarnia tego wzrokiem błyskawicznie. Jak czytasz online plik *.pdf o rozmiarze 4325 stron, to nie musisz przesyłać wszystkich stron naraz, wystarczy pokazywać kilka z nich, a resztę odpowiednio ładować, jak ktoś będzie to scrollował chcąc zobaczyć resztę. |
|
Worldmaster Temat założony przez niniejszego użytkownika |
» 2018-05-20 00:27:37 teoretycznie tak, ale jak jeden użytkownik będzie na 1 stronie a drugi na 2 to ten pierwszy jeżeli będzie dużo pisać to tego drugiego klienta przeniesie na trzecią więc powinien mieć chyba informację o całym dokumencie
znalazłem coś takiego https://stackoverflow.com/questions/29489409/understanding-neil-frasers-differential-synchronization-algorithm |
|
jankowalski25 |
» 2018-05-20 00:51:53 powinien mieć chyba informację o całym dokumencie |
Powinien, ale niekoniecznie w tej formie, że za każdym razem przesyłasz wszystko. Raczej lepiej zaimplementować jakąś historię zmian i niech serwer informuje, że dana osoba dopisuje daną treść w jakimśtam miejscu, a po stronie klienta można to odpowiednio odczytywać, przenumerowywać strony, przesuwać tekst i odświeżać poszczególne kawałki (na przykład za pomocą skryptów JS). |
|
« 1 » |