Projektowanie protokołu aplikacji

Mam istniejącą samodzielną aplikację, która zostanie rozszerzona przez 3rd-party, używając protokołu sieciowego. Możliwości są już zaimplementowane, wszystko czego potrzebuję to wystawienie ich Na Zewnątrz.

Zakładając, że protokół transportowy jest już wybrany (UDP), czy są jakieś zasoby, które pomogą mi zaprojektować protokół aplikacji?

Wydaje się, że jest wiele informacji na temat projektowania oprogramowania, ale nie na temat projektowania protokołów. Zajrzałem już do aplikacji Projekt Protokołu .

Author: kshahar, 2008-11-10

8 answers

Zobacz wytyczne projektowania protokołów Jabbera I RFC 4101 . Chociaż ma na celu uczynienie RFC łatwiejszym do zrozumienia dla recenzentów, to RFC dostarcza kilku interesujących porad.

 5
Author: philant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-10 12:13:36

Przeglądałeś Bufor protokołu Google ? Wydaje się to dobrym sposobem na rozwiązanie tego problemu.

Można utworzyć punkt końcowy, który komunikuje się z istniejącą aplikacją, a następnie odpowiada z zewnątrz za pomocą protokołu protobuffer. Jest binarny, więc jest mały i szybki i nie musisz pisać własnego menedżera protokołów, bo możesz użyć tych Google. Minusem jest to, że musi być zaimplementowany po obu stronach systemu (po stronie "serwera" i na po stronie konsumenta/klienta).

 5
Author: Martino Sabia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-22 02:09:10

Kolejna rekomendacja dla buforów protokołu - ładny ciasny binarny przy niewielkim wysiłku. Należy jednak pamiętać, że chociaż protokół binarny jest dobrze zdefiniowany, nie istnieje jeszcze uzgodniony standard RPC (kilka z nich jest w toku, skłaniając się ku TCP lub HTTP).

Spec sprawia, że bardzo łatwo jest mieć klienta i serwer w różnych architekturach, co jest dobre-plus jest rozszerzalne.

Zastrzeżenie: jestem autorem jednej z wersji . Net , więc mogę być stronniczy; - P

 4
Author: Marc Gravell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-10 10:43:39

Po pierwsze, UDP jest przede wszystkim jednokierunkową metodą transportu transmisji. Ponadto, jest to potencjalnie stratne , więc musisz być w stanie obsłużyć brakujące pakiety i pakiety out-of-order. Jeśli potrzebujesz jakiegokolwiek poziomu niezawodności od UDP lub potrzebujesz połączeń dwukierunkowych, będziesz potrzebować prawie wszystkiego od TCP, więc równie dobrze możesz pójść z tym na początek i pozwolić stosowi sieciowemu zająć się tym.

Następnie, jeśli Twoje dane są potencjalnie większe niż pojedynczy pakiet IP, to będziesz potrzebował jakiegoś sposobu identyfikacji początku i końca każdego pakietu oraz sposobu obsługi nielegalnych lub uszkodzonych pakietów. Polecam jakiś nagłówek z długością pakietu, jakąś stopkę i może sumę kontrolną.

Wtedy potrzebujesz jakiegoś sposobu kodowania wiadomości i odpowiedzi. Wokół jest wiele protokołów RPC. Możesz spojrzeć na SOAP lub zaprojektować Niestandardowy protokół oparty na XML lub binarny.

 4
Author: Anthony Williams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-13 15:21:54

Powinieneś naprawdę się zastanowić, czy naprawdę chcesz zaprojektować, udokumentować i utrzymać własny protokół, czy też użyć czegoś, co już istnieje. Prawdopodobnie istnieje już udokumentowany protokół, który odpowiada twoim potrzebom. W zależności od tego, co robisz, prawdopodobnie na początku będzie to wyglądać przesadnie, a implementacja wszystkich specyfikacji będzie wyglądać żmudnie i o wiele mniej zabawnie niż pisanie własnych, ale jeśli zamierzasz nadal aktywnie rozwijać swoją aplikację za kilka lat, należy zaoszczędź dużo czasu i pieniędzy, aby użyć czegoś, co już istnieje i jest znane przez osoby trzecie. Poza tym, jeśli możesz użyć istniejącej biblioteki dla tego protokołu, część implementacyjna powinna być dużo szybsza.

Projektowanie nowego protokołu jest przyjemniejsze niż implementacja, ale mniej niż utrzymanie go, ponieważ trzeba żyć ze wszystkimi wadami. Żaden protokół nie jest doskonały, ale jeśli nigdy go nie zaprojektowałeś, możesz być pewien, że popełnisz więcej błędów projektując go niż ludzie, którzy zaprojektowali istniejący dobrze znany protokół można użyć zamiast.

Krótko mówiąc, wykorzystaj to, co już istnieje, o ile to możliwe.

 1
Author: Krunch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-11 22:18:23

Jeśli nie chcesz budować protokołu od podstaw, powinieneś rzucić okiem na SOAP . Wsparcie jest różne dla różnych języków programowania, ale wyraźnie zachęca się do komunikacji między językami.

Niestety UDP i SOAP utknęły w powijakach, HTTP jest najczęściej używany.

 0
Author: GrGr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-10 09:54:06

Jeśli wybierasz XML, pamiętaj, że będziesz miał gigantyczny narzut znaczników.

Prosty protokół binarny będzie również potrzebować nie tyle ressources do parsowania w porównaniu do xml.

 0
Author: echox,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-10 09:58:36

Mam istniejącą samodzielną aplikację, która zostanie rozszerzona przez 3rd-party, używając protokołu sieciowego.

Pomogłoby dowiedzieć się trochę więcej o tym, co robi twój program i jaka jest natura tych rozszerzeń stron trzecich. Może jakieś uzasadnienie używania UDP?

 0
Author: a2800276,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-10 10:28:09