Czy WebSocket będzie dobry do setek tysiecy klientów?

Czy WebSocket będzie dobry do setek tysiecy klientów?
DA
  • Rejestracja:ponad 8 lat
  • Ostatnio:7 miesięcy
  • Postów:145
0

Potrzebuje napisać aplikację która będzie serwować dane do połączonych klientów. Klientów będzie setki tysięcy jak nie miliony.

  1. Co w takim przypadku będzie wydajniejsze WebSocket, ServerSocket czy coś innego?
  2. Do napisania serwera wykorzystać lepiej java EE z serwerem aplikacyjnych czy zwykła java?

Aplikacja klienta będzie na telefon jak i wersja przeglądarkowa.

edytowany 2x, ostatnio: flowCRANE
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 7 godzin
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4706
1

Nie miałem takiego problemu więc mogę czegoś nie wiedzieć . Tylko nie wiem czy dużo ludzi miało... więc postaram się pomóc z tego co wiem.

Akurat znam się na Java EE i absolutnie nie polecam do tego. JavaEE i WS nijak nie pasują. Działa, ale w tej skali do niczego się Ci Java EE nie przyda. (Będziesz w Oraclu z 2PC dane od klientow zapisywał? ... powodzenia).

Twój problem przede wszystkim to bedzie infrastruktura sieci (rozproszenie i ograniczenia systemów operacyjnych ) - kod servera to drugorzedny problem.
Bedziesz musiał rozproszyc to na wiele ( > 10 ) serwerów - (czyli cloud)

Z czegoć co wiadomo, że uciągnie to Netty.
https://dzone.com/articles/512000-concurrent-websockets
Ratpack, który lubie jest na Netty i obługuje WS - ale to tylko biblioteka w Javie.

Jak to rozproszyć? Ostanio bawiłem się Lagom frameworkiem i tam rozproszenie i cloud to podstawa.
Ma wsparcie dla WS jako jedną z podstawowych rzeczy.
Działa domyślnie na Cassandrze (czyli NoSQL zrobiony głównie z myślą o rozpraszaniu).
Ale, że zrobiłem w tym tylko głupią gierke, i jeszcze nie przetestowałem wydajnośći to nie moge w żaden sposób ręczyć.

A tak poza tym, żeby zrobić tu w miarę prawdopodobny sizing i zaproponować architekturę to trzeba by było długo posiedzieć. BARDZO dużo zależy od tego co ten system ma robić, jak wiele i jak często informacji ma przesyłać. Jakie wymagania na czasy odpowiedzi, consistency (zapomnij :-) ), rozmiar danych roboczych itp.


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 2x, ostatnio: jarekr000000
0

A mozesz uzasadnic do czego maja posluzyc websockety? Stream feed? Real time updates?

Na ile skomplikowany bedzie ten backend?
Bo jesli nie jakas super zaawansowana logika biznesowa to jezyk Go moglby byc niezla opcja. Ma dobry throughput, fajna wspolbieznosc i jest wydajny.

DA
Coś jak real time updates
M9
  • Rejestracja:prawie 10 lat
  • Ostatnio:prawie 6 lat
1

WebSocket ma sens jak potrzebujesz dwukierunkowej komunikacji (full-dupleksowe) połączenie. Czy na pewno tego potrzebujesz? Typowe chaty są dobrym przykładem. Jak wystarczy Ci half-duplex to może event source (SSE) będzie ok. Taki half-duplex to na przykład aktualizacja live mapy z aktualnym miejscem, gdzie znajduje się samolot w locie.

edytowany 1x, ostatnio: margor90
IE
IE
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 4 lata
  • Postów:317
1

Dokładnie websocket i pochodne są najczęściej używane do chatów, komunikatorów wszelkiej maści, czy systemów aukcyjnych/giełdowych.

jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 7 godzin
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4706
1

No więc od dłuższego czasu w niektórych swoich "experymentalnych" aplikacjach stosuję tylko WS - bo to o wiele dla mnie wygodniejszy model. NIe ma RESTa-/ Jsona - nie żyją. To działa nieźle gdy na froncie wtedy stosuje taką swoją chorą mutację patternu SAM i React.a .
Jakkolwiek cały czas mam w głowie, że gdybym kiedyś miał coś takiego stosować dla tysięcy klientów - to być może trzeba będzie zrobić fallback na JSONowy polling eventów.


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 1x, ostatnio: jarekr000000
Zobacz pozostałe 10 komentarzy
M9
Z drugiej strony jak piszesz aplikacje i chcesz czekać blokująco np. jak krótko trwająca operacja po stronie serwera zakończy się: np. sprawdzasz czy coś jest na magazynie zanim kontynujesz to request-response jest jak znalazł. Chyba robienie tego asynchronicznie wcale nie musi być łatwiejsze.
R3
Nie no... wszystko według zastosowań. Strony HTTP2 na pewno 'ładują się szybciej', multipleksowane żądań i odpowiedzi, kompresja nagłówków, TLS https://http2.akamai.com/demo . Na pewno znajdzie swoje zastosowanie. Jak i WS przydaja sie do odpowiednich zastosowan.
M9
Chyba cały zysk z HTTP/2 to właśnie ograniczenie liczby połączeń. Mam jednak wątpliwość czy binarny protokół będzie równie wygodny w integracji jak HTTP 1.1.
jarekr000000
Ale jak chcesz to zrobić kompletnie nieblokująco (w sensie biznesowym) - to np, user idzie jeszcze przez ileś ekranów - wpisuje dane karty kredytowej i dopiero wtedy przylatuje z servera "sorry ktoś ci sprzątnąl ostani egzemplarz magazynu Modny Programista" - usuwamy z koszyka/nie możesz kupić. Czasem może taki system mieć sens.
M9
W takim przypadku tak, ale chyba lepiej od razu zarezerwować towar. Ale jednak zarówno request-response, queue i publish subscribe to 3 równie przydatne paradymaty: zależy od zastosowania.
M9
  • Rejestracja:prawie 10 lat
  • Ostatnio:prawie 6 lat
1

Często WebSocket służą jako tunelowanie messagingu wiadomości w formacie tekstowym. Służy do tego bardzo prosty protokół STOMP:
https://stomp.github.io/

Jest to taki asynchroniczny messaging na wyższym poziomie niż czysty WebSocket. Ale nie miałem okazji wykorzystać. Obsługuje kolejki, publush-subscribe i prymitywne transakcje (czy udało się dostarczyć komunikat po WebSocket).

Obsługuje klasyczne paradygmaty jak point-to-point oraz publish subscribe.

edytowany 3x, ostatnio: margor90
DA
  • Rejestracja:ponad 8 lat
  • Ostatnio:7 miesięcy
  • Postów:145
0

Dzięki za odzew :) Głównie chodzi o przesyłanie danych od użytkownika na serwer i z serwera do użytkownika kiedy pojawią nowe dane które powinny trafić do niego (średnio przesył danych na jednego użytkownika będzie co 5sekund lub częściej) x kilkaset tysięcy lub miliony użytkowników.
Sposób request-response średnio wchodzi w grę (konieczność trzymania obecnie pobranych danych i wysyłania tylko nowych na bieżąco).
Na pierwszy rzut oka najlepszym wyjściem jest WebSocket, bo w "dane" które już pobrał użytkownik będą trzymane w pamięci przez cały czas kiedy jest aktywne połączenie.
W przypadku request-response jest to też możliwe do zrobienia ale wymaga bardziej złożonej implementacji co wydaję się że spadnie wydajność serwera.
Aplikacje którą chcę napisać można porównać działaniem do czata ogólno-dostępnego dla wszystkich zalogowanych użytkowników.

Co do obsługi tak dużęj ilości klientów, czy nie lepiej napisać aplikacje tak aby mogłą działać klastrowo?
Wtedy nasuwa się pytanie jak to zrobić? Stworzyć serwer głowny który odbiera połączenia i deleguje je na serwery podrzędne?

jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 7 godzin
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4706
1

Klastrowo -> Zobacz przykład chat/twittera w Lagom
https://github.com/lagom/activator-lagom-java-chirper
Obsługuje WS (nadal to tylko "pokazówka")


jeden i pół terabajta powinno wystarczyć każdemu
1
darksead napisał(a):

Wtedy nasuwa się pytanie jak to zrobić? Stworzyć serwer głowny który odbiera połączenia i deleguje je na serwery podrzędne?

Load balancer?

DA
  • Rejestracja:ponad 8 lat
  • Ostatnio:7 miesięcy
  • Postów:145
0

jesli chodzi o load balancing to chodzi o instalacje kilku serwerow pod jedna domena DNS i na poziomie proby polaczenia klienta do serwera bedzie kierowane polaczenie do najmniej obciazonego? Sa juz jakies gotowe rozwiazania tego typu czy samemu musialbym cos takiego napisac? Jesli samemu to jak sie za to zabrać?

jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 7 godzin
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4706
1

Na poziomie DNS (to co mniej więcej opisujesz) - działa tzn round robin DNS - klient łączy się z losowym z dostępnych IP (ale nie z najmniej obciążonym, bo tego klient nie wie).

Możesz mieć load balancer na poziomie serwera "proxy"
od apache mod_proxy_load-balancer (dość prymitywny),
przez varnish HTTP cache
i w cholere dużo różnego komercyjnego - np. F5.

Takie proxy może inteligentnie przekierowywać ruch - najczęściej przede wszystkim dba po prostu o sprawdzanie które z nodów są aktywne (np. regularny ping) i kieruje połączenia tylko do działających.

Z algorytmow wybierania to generalnie najczęściej (chyba - statystyk nie mam) się używa round robin czyli losowego przydzielania. Bo różnego rodzaju algorytmy typu najmniej obciążony, najmniej połączeń są podatne na dziwne problemy. (Przykładowo serwer może mieć mało połączeń - bo nie wyrabia i je dropuje..., albo dopiero startuje i trzeba mu dać czas na rozgrzewkę ( a nie od razu zasypać ziemniakami )).

Load balancer jest też niezbędny jak chcesz uniknąć downtime - czyli np. wrzucasz nową wersje softu to po kolei odpinasz nody , na każdym robisz update i go przypinasz na powrót. W ten sposób nawet mając mnóstwo podpiętych klientów można zrobić update softu tak, że nikt się nie zorientuje.


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 2x, ostatnio: jarekr000000
1

W spring cloud masz ribbona, client side load balancer. Ogolnie mozesz poczytac co mozesz dostac od springa.

Sa tez rzeczy jak haproxy.

Poczytaj tez o api gateway.

DA
  • Rejestracja:ponad 8 lat
  • Ostatnio:7 miesięcy
  • Postów:145
0
jarekr000000 napisał(a):

Nie miałem takiego problemu więc mogę czegoś nie wiedzieć . Tylko nie wiem czy dużo ludzi miało... więc postaram się pomóc z tego co wiem.

Akurat znam się na Java EE i absolutnie nie polecam do tego. JavaEE i WS nijak nie pasują. Działa, ale w tej skali do niczego się Ci Java EE nie przyda. (Będziesz w Oraclu z 2PC dane od klientow zapisywał? ... powodzenia).

Twój problem przede wszystkim to bedzie infrastruktura sieci (rozproszenie i ograniczenia systemów operacyjnych ) - kod servera to drugorzedny problem.
Bedziesz musiał rozproszyc to na wiele ( > 10 ) serwerów - (czyli cloud)

Z czegoć co wiadomo, że uciągnie to Netty.
https://dzone.com/articles/512000-concurrent-websockets
Ratpack, który lubie jest na Netty i obługuje WS - ale to tylko biblioteka w Javie.

Jak to rozproszyć? Ostanio bawiłem się Lagom frameworkiem i tam rozproszenie i cloud to podstawa.
Ma wsparcie dla WS jako jedną z podstawowych rzeczy.
Działa domyślnie na Cassandrze (czyli NoSQL zrobiony głównie z myślą o rozpraszaniu).
Ale, że zrobiłem w tym tylko głupią gierke, i jeszcze nie przetestowałem wydajnośći to nie moge w żaden sposób ręczyć.

A tak poza tym, żeby zrobić tu w miarę prawdopodobny sizing i zaproponować architekturę to trzeba by było długo posiedzieć. BARDZO dużo zależy od tego co ten system ma robić, jak wiele i jak często informacji ma przesyłać. Jakie wymagania na czasy odpowiedzi, consistency (zapomnij :-) ), rozmiar danych roboczych itp.

Dlaczego WebSocketow nie implementować w JAVA EE? Przecież można to zrobić bardzo prosto przy pomocy adnotacji i opcja zarządzania wątkami też nam odpadnie bo zrobi to za nas kontener. Tak samo z transakcjami entity managera. Działą to wolniej niż napisanie tego przy użyciu zwykłej Javy?

jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 7 godzin
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4706
1

Dlaczego WebSocketow nie implementować w JAVA EE? Przecież można to zrobić bardzo prosto przy pomocy adnotacji i opcja zarządzania wątkami też nam odpadnie bo zrobi to za nas kontener. Tak samo z transakcjami entity managera. Działą to wolniej niż napisanie tego przy użyciu zwykłej Javy?

Dokładnie wymieniłeś powody dlaczego nie robić tego na JavaEE. W pewnej skali transakcje (w znaczeniu JavaEE/SQL) to nie wolniej... to katastrofa.
Przy czym uwaga - uważam, że da się to zrobić w JavaEE (nie takie głupoty się robi) - tylko, że skorzystasz dokładnie z żadnych ficzerów JavaEE, bo np. raczej nie będziesz korzystał z SQL tylko weźmiesz bazę danych (jeśli jakąkolwiek) taką która wspiera AP z CAP - czyli np. Cassandra, CouchDB etc.

A najważniejsze - żeby to wszystko zrobić to trzeba się nauczyć JavaEE oraz oduczyć Javy -> nie warto.


jeden i pół terabajta powinno wystarczyć każdemu
M9
JavaEE/SQL/transakcje po prostu nie służą do tworzenia wysokoskalowalnych aplikacji. A jak ktoś chce sobie zrobić dwukierunkowe połączenie z przeglądarką to sobie użyje WebSocketa, w czym problem (w nieskalowalnej aplikacji i tak się to może opłacać)? Nawet z JSF będzie to zintegrowane. Long pooling nie jest taki fajny. Zależy od wymagania. WebSocket nie musi być używany w aplikacjach na miliony użytkowników, aby być przydatny.
DA
  • Rejestracja:ponad 8 lat
  • Ostatnio:7 miesięcy
  • Postów:145
0

Jeśli JAVA EE nie nadaje się do aplikacji z których mają korzystać miliony użytkowników to w jaki sposób działają aplikacje bankowe? Z tego co czytałem po ogłoszeniach o pracę to 99% bankowych ogłoszeń wymaga JAVE EE więc wynika że ich system także jest na tej technologii zbudowany, a korzystają z tego miliny ludzi. (Nie neguje tego co napisałeś tylko pytam z czystej ciekawości :) )

1

Według mnie używanie JavaEE jest mało praktyczne, lepsze rozwiązania open source niż enterprise na które trzeba czekać.
open source szybciej dostarcza rozwiązania na problemy, z którymi można się spotkać.

M9
JEE jest open-source, ale własnościowe serwery aplikacyjne to porażka
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 7 godzin
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4706
2

Jakby co pracuje w ubezpieczeniach, wcześniej robiłem kilka projektów w bankach. Rzeczywiście JavaEE (a zwłaszcza WAS) jest bardzo obecny. Faktycznie da się obsłużyć miliony klientów (pod warunkiem, że za dużo nie wymagają i logują się max raz na dwa dni :-) ). I ogólnie się wiele da.
Ale że pracuję z tym codziennie to generalnie nie polecam. Zresztą większym problemem jest nie JavaEE itself tylko ludzie. Po prostu do czasu aż wszyscy w zespole nie są specami JavaEE - to programowanie to spacer po polu minowym nieco tylko lepszy od JavaScriptu. Nawet nie wiesz ile ja pytań na review zadaje (ludzie piszą kod i nie wiedzą czemu działa, albo wrzucają adnotacje bo podpatrzyli u kolegi,( mu pomogło wiec też wrzucę - normalnie szamanizm)). Nawet nie mogę ogarnąć na ile pytań nie znam odpowiedzi (po nastu latach pisania w JavaEE -choć chyba dlatego, że zaczynam już więcej zapominać niż się uczyć). Eventualne odpowiedzi znajduje debugując websphera / bo ani stackoverflow ani doki ani specka nie jest jasna czasami- fajnie ). Czy muszę dodać, że największe kwiatki (czyste absurdy z punktu widzenia specyfikacji JavaEE) znajduje w kodzie seniorów?

Kiedyś wszystkich łącznie z sobą wysyłałem na szkolenia. Teraz uważam, że już nie warto - można prościej i łopatologiczniej pisać serwery.

Jeszcze jedno uzupełnienie - JavaEE, a szczególnie jej główny kawałek EJB powstały aby można było robić rozproszone transakcje. To
główny problem jaki ta architektura miała rozwiązać. Moja firma "chodzi" na JavaEE. Rozproszone transakcje musiano wywalić już dawno... (podobno systemy umierały).


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 7x, ostatnio: jarekr000000
Zobacz pozostałe 5 komentarzy
M9
Dla mnie kod używający bazy to już lekki test integracyjny. Ale to już kwestia konwencji i nazewnictwa. Ja unit testem nazywam coś co nie łączy się z bazą i jest raczej odizolowane od środowiska.
R3
@jarekr000000: "in memory HSQL" a np. na CI są odpalane na docelowej bazie?
jarekr000000
@rav3n: przeważnie niestety nie. Mamy część systemow na bazie CRX i te mają testy integracyjne OK. Niestety moja baza to Oracle i nie mam w infrastrukturze na razie możliwości postawienie sobie ad hoc Oracle pod testy (a ptem ubicia).
jarekr000000
@margor90: to czy baza to test integracyjny czy nie - to proste kryterium. Czy ta baza przychodzi z zewnątrz i musisz tam coś wstawiać lub coś wyciągac bo to jest twoje API do innych systemów :-)? Jeśli nie i jest ta baza wewnętrzną sprawą twojego modułu (ty decydujesz o strukturze oraz danych) - to wtedy to jest to samo jak byś miał np. HashMapę jako pole. Twoja sprawa, należy do twojego unitu ( no... komponentu) :-)
R3
@jarekr000000: No w sumie jest ryzyko wtedy, że wtedy nie wykryje się błędów specyficznych dla danej bazy ;)
0
margor90 napisał(a):):

"JEE jest open-source, ale własnościowe serwery aplikacyjne to porażka"

Ale styl wydawania tego jest powolny, zbieranie community itp.
Po prostu jest to za wolno wydawane. Ile można czekać na Java EE 8 ?

jarekr000000
Pytanie po co na to czekać? To jak czekanie na podwyższenie podatków.
M9
Poprawiło się. Zobacz Payara: http://www.payara.fish/ Masz fajne nowe feature'y bez JEE 8 np. integracje z Hazelcast oraz komercyjne wsparcie od razu.
M9
IMO Payara jest super mimo, że to JEE. Poza brudnymi łapskami Oracle'a :-)
M9
A i community jest fajne. Kwartalne wydania.
0

Z dwojga złego wolę świat Springa ;)

M9
Ja lubię spring boot, ale z modułami z JEE np. JAX-RS zamist Spring MVC i Bean Validation. Nie lubię Springowych alternatyw np. dla SOAP. Już wolę wziąć Springa i CXF z adnotacjami z JEE. Ale prawda jedno i drugie to zło. Pytanie czy istnieje jakaś naprawdę dobra alternatywa, którą doceni przemysł?
DA
  • Rejestracja:ponad 8 lat
  • Ostatnio:7 miesięcy
  • Postów:145
0

W aplikacji będą powiadomienia użytkownika ( dotyczące pojawienia się nowego wpisu w bazie danych), teraz pytanie jak to ogarnąć aby było wydajne. Bazy danych na serwerach będą połączone w klastrze i dane będą zreplikowane na każdy z nich.

  1. Odpytywanie bazy co jakiś czas tylko o nowe wpisy po dacie i przesyłanie do wszystkich podpiętych użytkowników.
  2. Trochę bardziej skomplikowany ale czy nie bardziej wydajny? Serwery będą się łączyć do serwera głównego który będzie miał także mechanizm rozsyłania nowych danych pomiedzy serwery podrzędne (każdy nowy wpis będzie wysłąny do każdego oraz od każdego). Taki manewr pozwoliłby uniknąć odpytywania bazy co jakiś czas, ale czy nie obciąży niepotrzebnie serwera głównego do rozsyłania danych pomiędzy węzłami?
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 7 godzin
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4706
0

Raczej jak dodajesz ten magiczny wpis do bazy to od razu publikujesz jakiś event, który mogą pozostałe serwery nasłuchiwać (topic) i dopiero wtedy jazda do websocketa.
Jak i czym zrobisz te eventy to inna para kaloszy. (To, że masz websockety i jakieś powiadomienia, a nie masz jeszcze mechanizmu messagingu, to raczej znaczy, że zabrałeś się od d... strony i masz nieadekwatną architekturę do problemu (czyli jak wszyscy :-) ).


jeden i pół terabajta powinno wystarczyć każdemu
DA
  • Rejestracja:ponad 8 lat
  • Ostatnio:7 miesięcy
  • Postów:145
0

He he, na razie jestem na etapie zbierania wiedzy :D W sumie co do rozprowadzania powiadomień miedzy serwery, chciałem załatwić to tak że główny serwer ma aktywny mechanizm do którego łączą się pozostałe serwery (przy pomocy websocketa). Tylko jeśli ten główny serwer padnie to wtedy tracimy rozprowadzanie powiadomień. Masz jakiś pomysł jak to załatwić wydajnie i niezawodnie ? :P

jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 7 godzin
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4706
0

Jak byś chciał messaging dość niezawodny to możesz spojrzeć na:
https://www.rabbitmq.com/features.html (ale to jedna z setek możliwości).

Jakbyś chciał jakąś "niezawodność" systemu... to podaj ile masz milionów euro i co chcesz zrobić - zobaczymy :-)
Przede wszystkim podaj jaka niezawodność jest Ci potrzebna.


jeden i pół terabajta powinno wystarczyć każdemu
DA
  • Rejestracja:ponad 8 lat
  • Ostatnio:7 miesięcy
  • Postów:145
0

Co do niezawodności to myślę że pomysł z load balancing na poziomie DNS będzie dobry (przekazywanie połączeń do serwerów z mniejszą ilościa aktualnie podpiętych klientów) też pozwoli na utrzymanie funkcjonalności kiedy jeden z nich padnie.

Jeśli chodzi o ciągłą komunikację client-server to najlepiej wybrać zwykłe sockety? (ServerSocket, Socket) czy WebSocket tutaj pojawia się mały problem w przypadku aplikacji na zwykłej Javie bo mamy tylko ServerSocket do którego nie podepnie się WebSocket, jak pożenić te dwa różne sockety?

jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 7 godzin
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4706
1

Ja tam mam w Javie prosty do ogarnięcia Websocket z Ratpacka. https://ratpack.io/manual/current/api/ratpack/websocket/WebSockets.html
Możesz też spojrzeć na http://sparkjava.com/documentation.html#websockets - ale ten drugi nie podoba się.


jeden i pół terabajta powinno wystarczyć każdemu
DA
  • Rejestracja:ponad 8 lat
  • Ostatnio:7 miesięcy
  • Postów:145
0

A co sądzisz o Jetty? Podobny jest do tego Spark'a

0

Odnośnie PubSub messagingu to... Kafka jest teraz trendy...
Ale mi osobiście wydaje się dość dużym kalibrem.

Z dokumentacji:
"n comparison to most messaging systems Kafka has better throughput, built-in partitioning, replication, and fault-tolerance which makes it a good solution for large scale message processing applications."

wiec przed użyciem zastanowiłbym się 3 razy.

0

Czy Node jest tylko stworzone do czatów i nie stawia się prostych blogów, witryn w nim. Tylko nadal będzie klepać to w PHP, Ruby i Pythonie?

Maciej Cąderek
Maciej Cąderek
Pewnie, że można robić takie rzeczy w Node.js
DA
  • Rejestracja:ponad 8 lat
  • Ostatnio:7 miesięcy
  • Postów:145
0

Jeszcze takie pytanie jak zrobic w bezpiecznysposob logowanie przez websocketa. Chodzi mi oto ze dane logowania czyli login i haslo mialo bybyc wysylane przez websocketa gdzie potem aplikacja kilenta otrzyma session id do dalszej weryfikacji itd tylko jak to zrobic aby nikt nie orzechwicil danych ?

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)