W jaki sposób usługa Azure Web PubSub obsługuje bibliotekę Socket.IO?
Ten artykuł zawiera perspektywę inżynieryjną dotyczącą sposobu migrowania własnych aplikacji Socket.IO na platformę Azure przy użyciu usługi Web PubSub na potrzeby Socket.IO z minimalnymi zmianami kodu. Następnie możesz skorzystać z uproszczonej architektury aplikacji i wdrożenia, jednocześnie osiągając 100 000 połączeń współbieżnych. Nie musisz rozumieć wszystkiego w tym artykule, aby efektywnie korzystać z usługi Web PubSub na potrzeby Socket.IO.
Architektura własnej aplikacji Socket.IO
Na poniższym diagramie przedstawiono typową architekturę własnej aplikacji Socket.IO.
Aby zapewnić skalowalność i niezawodność aplikacji, użytkownicy Socket.IO często mają architekturę obejmującą wiele serwerów Socket.IO. Połączenia klienckie są dystrybuowane między serwerami Socket.IO w celu równoważenia obciążenia systemu.
Konfiguracja wielu serwerów Socket.IO stanowi wyzwanie, gdy deweloperzy muszą wysłać ten sam komunikat do klientów połączonych z innym serwerem. Deweloperzy często nazywają ten przypadek użycia "emisją komunikatów".
Oficjalną rekomendacją biblioteki Socket.IO jest wprowadzenie składnika po stronie serwera o nazwie adaptera do koordynowania serwerów Socket.IO. Karta określa, z którymi serwerami są połączeni klienci, i instruuje te serwery do wysyłania komunikatów.
Dodanie składnika adaptera zwiększa złożoność zarówno w zakresie programowania, jak i wdrażania. Jeśli na przykład architektura korzysta z karty Redis, deweloperzy muszą:
- Zaimplementuj sesje sticky.
- Wdrażanie i obsługa wystąpień usługi Redis.
Nakład pracy inżynieryjnej i czas w uzyskaniu kanału komunikacyjnego w czasie rzeczywistym rozprasza deweloperów przed pracą nad funkcjami, które sprawiają, że aplikacja lub system są unikatowe i cenne dla użytkowników.
Co web PubSub dla Socket.IO ma na celu rozwiązanie dla deweloperów
Mimo że deweloperzy często zgłaszają, że konfigurowanie niezawodnej i skalowalnej aplikacji utworzonej za pomocą biblioteki Socket.IO jest trudne, deweloperzy mogą korzystać z intuicyjnych interfejsów API i szerokiej gamy klientów obsługiwanych przez bibliotekę. Usługa Web PubSub dla Socket.IO opiera się na wartości, którą oferuje biblioteka, jednocześnie zapewniając deweloperom złożoność zarządzania połączeniami trwałymi i na dużą skalę.
W praktyce deweloperzy mogą nadal korzystać z interfejsów API biblioteki Socket.IO bez konieczności aprowizacji zasobów serwera w celu obsługi połączeń protokołu WebSocket lub połączeń opartych na długich sondowaniach, które mogą być intensywnie obciążające zasoby. Ponadto deweloperzy nie muszą zarządzać składnikiem adaptera i wdrażać go. Serwer aplikacji musi wysyłać tylko jedną operację, a usługa Web PubSub dla Socket.IO emituje komunikaty do odpowiednich klientów.
Jak to działa
Usługa Web PubSub dla Socket.IO opiera się na protokołach Socket.IO przez zaimplementowanie karty i Engine.IO. Na poniższym diagramie przedstawiono typową architekturę podczas korzystania z usługi Web PubSub na potrzeby Socket.IO z serwerem Socket.IO.
Podobnie jak aplikacja Socket.IO hostowana samodzielnie, nadal musisz hostować logikę aplikacji Socket.IO na własnym serwerze. Jednak w przypadku usługi Web PubSub dla usługi Socket.IO:
- Serwer nie zarządza już bezpośrednio połączeniami klienckimi.
- Klienci nawiązują trwałe połączenia z usługą (połączeniami klienckimi).
- Serwery ustanawiają również trwałe połączenia z usługą (połączeniami serwera).
Gdy logika serwera używa metod send to client
, broadcast
i add client to rooms
, te operacje są wysyłane do usługi za pośrednictwem ustanowionego połączenia serwera. Komunikaty z serwera są tłumaczone na operacje Socket.IO, które Socket.IO klienci mogą zrozumieć. W rezultacie każda istniejąca implementacja Socket.IO może działać bez istotnych modyfikacji. Jedyną modyfikacją, którą należy wprowadzić, jest zmiana punktu końcowego, z którym łączą się klienci. Aby uzyskać więcej informacji, zobacz Migrowanie własnej aplikacji Socket.IO do pełnego zarządzania na platformie Azure.
Gdy klient łączy się z usługą, usługa:
- Przekazuje połączenie Engine.IO (
connect
) do serwera. - Obsługuje uaktualnienie transportu połączeń klienckich.
- Przekazuje wszystkie komunikaty Socket.IO do serwera.