Zakodowałem serwer, który korzysta z buforów protokołóww Javie. Klient rozmawia z nim za pomocą PB. „Chciałbym przeprowadzić migrację kodu serwera do Java EE i skorzystać z wbudowanych funkcji kontenerów, takich jak klastrowanie.
Jak mogę uzyskać usługę, która odbiera wiadomości PB i odpowiednio je interpretuje, a następnie obsługuje?
Myślałem o dedykowanym typie serwletu, ale jak to zrobić?
Jestem nowicjuszem Java EE. Nie znam się wystarczająco dobrze na serwerach aplikacji Java EE, aby wiedzieć, czy istnieje sposób, aby tak się stało.
P.S. Szukam rozwiązania, które wykorzystuje bezpośrednio gniazda TLS. Nie są tu mile widziane protokoły pośredników, takie jak HTTP.
P.P.S. Proszę tylko o rozwiązania typu open source.
Odpowiedzi:
0 dla odpowiedzi № 1Jeśli spojrzymy na klasy serwletów, sugerująże powinno być możliwe zbudowanie dowolnego serwletu obsługującego dowolny rodzaj protokołu, nie tylko HTTP (można by pomyśleć, że powinno być możliwe stworzenie własnego rodzaju serwletu, który rozszerza się GenericServlet
, tak jak HttpServlet
robi).
Jednak w praktyce nie jest to możliwe,ponieważ serwer Java EE, na którym będzie uruchomiony, najprawdopodobniej obsługuje tylko standardowe serwlety HTTP. Nie ma standardowego sposobu, aby serwery Java EE obsługiwały serwlety dla innych rodzajów protokołów. Zatem próba napisania własnego serwletu specyficznego dla protokołu nie jest dobrym rozwiązaniem.
0 dla odpowiedzi nr 2
Niestety Java EE nie oferuje standardowego sposobu dodawania nowych protokołów do serwerów.
Jedyne, co oferuje, to możliwość otwierania ServerSocket
za pośrednictwem Architektura konektora Java. JCA jest dość skomplikowane, ale na szczęście Mark Jeffrey napisał łącznik o nazwie Gniazda JCA który zapewnia prosty, ogólny sposób na zrobienie tego. Za jego pomocą możesz pisać fasola oparta na wiadomościach wywoływane za każdym razem, gdy zostanie nawiązane połączenie z twoim ServerSocket
i które mają wynikowe Socket
przeszedł do nich; możesz wtedy zrobić wszystko, czego potrzebujesz, aby zdekodować i obsłużyć tam wiadomość protobuf.
Jeśli nie masz ochoty tego robić, możesz po prostu otworzyć ServerSocket
bezpośrednio. Narusza to zasady Java EE, ale większość kontenerów pozwoli ci się z tym pogodzić.