Rozgłaszanie komunikatów w systemie

0

Cześć,

Na początek witam wszystkich :) Robie sobie projekt działający na zasadzie usługi systemowej, którego zadaniem jest przetwarzanie danych wejściowych, a następnie propagacja komunikatów o nich do zainteresowanych aplikacji-słuchaczy. Coś jak eventy myszki z założeniem, że mój główny program to taki sterownik tejże myszki, który rozsyła po systemie informacje o zmianach jej statusu.

Standardowo w Windzie mogłbym użyć WinAPI i w ten sposób rozsyłać komunikaty, jednakże bardziej interesuje mnie rozwiązanie przenośne (po to w końcu piszę to w Javie, a nie C# :)

Szukając po sieci trafiłem na numer z lokalnym mini-serwerem TCP lub UDP, do którego zainteresowane aplikacje się podłączają po gniazdkach i w ten sposób otrzymują komunikaty. No jest to jakiś sposób, ale raczej mało elegancki, trochę mało wydajny (prędkość liczona w milisekundach ma znaczenie) no i problematyczny z punktu widzenia aplikacji-słuchaczy, które zamiast polegać na systemowej kolejce komunikatów muszą implementować jakieś cuda na kiju związane z obsługą TCP lub UDP. Szukam więc jak najbliższego systemowi rozwiązania, ale niezależnego od platformy (czyli natywnie w Javie, a nie przez WinAPI i analogiczne).

Może ktoś się spotkał z takim problemem i mógł by nakierować na jakieś sprawdzone rozwiązania lub pomysły? Z góry dzięki :)

ps. zastanawiam się nad JMS ale nie bardzo się w tym orientuję - to jest przenośne i działa np. tak, że ja sobie z aplikacji Javy wysyłam komunikat i do tego się może wpiąć jakoś sensownie cokolwiek napisane w czymkolwiek? Czy to tylko komunikacja między programami napisanymi w Javie?

0

A moze D-Bus, jest to uzywane chociazby przez KDE. Maja swoja biblioteke dla javy, ktora nie jest jakas nalkladka, tylko napisana natywnie w Javie, a przez to jest przenosna. Napisana przez tworcow D-Bus, czyli to jest taka oficjalna biblioteka. http://dbus.freedesktop.org/doc/dbus-java/
A ogolnie to dziala to tak ze jest sobie serwer, do niego podlaczaja sie zainteresowane procesy, i moga albo zarejestrowac listenery dla danego eventa, lub wyszukac sobie komunikaty ktore je interesuja. Twoj programik by te eventy wysylal. Wiec chyba tak jak chcesz?
Pozdrawiam.

0

Tylko, ze to jest ograniczone do Unix'a (jesli nie do samego KDE) chyba? Poczytalem troche o tym JMS i tez chyba nie bardzo - za duze to, platne i w ogole dziwne takie. Chyba multicast po socketach jednak pozostaje.

0

Nie, D-Bus jest tez i pod windowsa (poszukaj chociazby na wiki), a KDE jest tylko jednym z projektow ktore wykorzystuja ten mechanizm, ktory akurat mi sie nasunal na mysl.
Co do JMS to tez mogloby dzialac, przy czym jesli implementacja serwera jest w javie, to klienci nie-javowi moga miec problem, a jesli JMS bylby nakladka na jakis nie-javowy system (np Oracle AQ) - to jest to tylko nakladka, a sa inne opcje.
Mozesz tez zwrocic uwage na Apache ActiveMQ implementujacy JMS 1.1, a majacy mozliwosc obslugiac klinety w javie, c#, c++ (ma jakies specjalne ulepszenia dla tych jezykow), jest open source (free, widzialem ze cena to jest jeden z waznych argumentow).

0

Aha no i jeszcze jedno, nie wiem czy chcesz pisac na komputer lokalny, czy tez dla klientow sieciowych. D-Bus zdaje sie dziala tylko lokalnie.

0

Dzieki za odpowiedz - zainteresuje sie tym. Potrzebne to jest tylko na komputer lokalny. na razie zrobilem rozglaszanie po multicastowym gniazdku i dziala chyba ok - leci tego 32 do 64 bajtow (jeszcze nie dopracowalem specyfikacji wiadomosci ;) i jest stosunkowo elastyczne, musze jeszcze puscic na tym testy wydajnosciowe czy sie nie pogubi np. przy 30Hz. Ale zobaczyc inne rozwiazania i porownac dzialania zawsze warto :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1