od Podstaw
6 godz. 26 min · Go · Full-stack i Programowanie
Piotr KrzesajW Go wszystko opiera się o typy. Czym one są? Tak zwane typy proste(string, int, float itd.) to tylko początek, interfejsy, struktury i nie tylko. Pokażę Ci jak używać wielu wątków Go i jakie są sposoby komunikacji między nimi, a także opowiem i pokażę na praktycznych przykładach jakie zagrożenia niesie ze sobą wykorzystywanie wielowątkowości.
W Go nie mamy obiektowości znanej z wielu innych języków. Posiada zalążki obiektowości ale sprawia to wielu osobom problemy jak podejść do architektury aplikacji. Nauczę Cię jak podejść do funkcyjności w taki sposób aby wciąż nawet duże aplikacje były łatwo rozwijalne lub co ważniejsze, była możliwość podzielenia ich na mniejsze mikroserwisy gdy zajdzie taka potrzeba.
Wśród programistów można usłyszeć głosy że w Go wielowątkowość jest świetnie rozwiązana i trudno się z tym nie zgodzić ale warto pamiętać że nasze mózgi działają jednowątkowo i często pomijamy zagadnienia takie jak wyścig wątków, deadlock i inne wyzwania, które stawia przed nami praca na dzisiejszych procesorach. Pokażę i wytłumaczę Ci w praktyce większość z nich i jak sobie z nimi radzić i na co uważać. Jeśli nie pracowałeś z językami wielowątkowymi to ta sekcja jest specjalnie dla Ciebie.
Zastanawiałem się wiele razy czy nie istnieje taka technologia w której piszę sobie jeden pliczek i z tego pliku do każdego języka mogę wygenerować sobie klienta i serwer jedną komendą. To jest w wielkim skrócie GRPC, nie musisz się przejmować czy używasz HTTP 1.1/2.0, czy używasz websocketów do transmisji, czy przesyłasz dane w formacie JSON, XML, Protobuf, czy jest moje API kompatybilne wstecz. Tym wszystkim zajmuje się GRPC. Wyjaśnię Ci czym dokładnie jest, dlaczego jest super i wreszcie jak tego używać razem z językiem Go. Napiszemy praktyczny projekt chatu w którym wykorzystamy funkcję server-streaming.
Pisząc aplikację chcemy aby uruchamiała się ona tak samo niezależnie czy uruchamiamy ją na Linuxie, macOS czy na Windowsie i z pomocą przychodzi nam Docker. Pokażę Ci jak z gotowej aplikacji napisanej w Go stworzyć obraz Dockerowy aby móc go uruchamiać na swoim komputerze bądź serwerze. Pokażę Ci również jak nasz obraz Dockerowy połączyć z bazą danych za pomocą Docker Compose aby móc cieszyć się działającą aplikacją uruchamianą jedną komendą.
Kurs Go nie mógłby obejść się bez serwera HTTP stworzonego tylko z pomocą biblioteki wbudowanej w język Go. Dokładnie tak, nie musisz instalować nic poza językiem i już możesz tworzyć serwery co jest świetną wiadomością. Następnie pokażę Ci popularną bibliotekę Gin do tworzenia serwerów. Dzięki temu zobaczysz różnice i ocenisz czy warto zostać przy wbudowanej bibliotece czy może używać zewnętrznych.
Jak w każdym języku serwerowym tak i w Go możemy się podłączyć pod bazę danych. Krok po kroku wyjaśnię Ci jak to zrobić prosto i przyjemnie używać baz SQL, które od dziesiątek lat cieszą się niezwykłą popularnością. Migracje, zapytania czy dbanie o połączenie to nie będzie dla Ciebie nic trudnego.
Ten Kurs powstał z myślą o osobach, które chciałyby poszerzyć swoją wiedzę o język Go. Zakłada on że posiadasz już wiedzę z minimum jednego innego języka programowania i wiesz w jaki sposób działa komunikacja po protokole HTTP. Możesz też znać Go i chcieć zobaczyć jak dzielić programy na paczki tak aby były łatwo rozwijalne w przyszłości.
W poprzedniej lekcji pokazałem jak zrobić to samo co zrobiliśmy do serwera
HTTP tylko że w tej lekcji pokażę ci jak do tego dopisać
jeszcze serwer który jest w stanie na żywo wysyłać wiadomości czyli tzw.
strumień i musimy zacząć oczywiście i wrócić do deski Szklarskiej do naszego
pliku foto czyli tutaj i dopisać funkcję która będzie wysyłała nam
wiadomości czyli to będzie funkcje dotyczące czatu.
Będzie wysyłanie wiadomości będzie się do wiadomości i będzie pobieranie
historii wiadomości no i oczywiście tworzymy sobie
funkcję Send message i tu będzie coś i ona będzie oczywiście o coś zwracała.
Główną funkcją będzie Script Forum Jazz.
I ona to samo będzie przyjmowała coś i będzie coś zwracała.
I trzecia funkcja czyli ścisły.
I ona również będzie też przyjmowała i
będzie coś zwracała z zapomniałem literki s na końcu i teraz stwórzmy np.
jeśli chodzi o Message to żebyśmy wysłali message.
Czyli niech to będzie do kogo.
Czyli będziemy przesłali 64 do kogo.
Czyli do tej osoby i 64.
Od kogo czyli od kogo do kogo.
Jako 64 wyślemy datę kiedy i wiadomość czyli String message.
I to będzie nasze miasto lecz oczywiście
pilot Send message to będzie zupełnie coś innego i tu mamy Send message Request
dlatego że nazwa wiadomości nie może być tak samo jak nazwa naszego naszej funkcji
czyli w tym przypadku to będzie tylko i wyłącznie nr 64 do kogo chcemy to wysłać.
I chcemy też wysłać Street czyli message.
Więc myślę że będzie to send request.
Tutaj mamy jedną literę S za dużo i ona będzie zwracała nam nic.
Czyli będzie nam zwracała w tym przypadku np.
Request i w przypadku grupowania się do wiadomości będziemy wysyłali tutaj nic.
Czyli to też może być get your request a
będziemy wracać tu wiadomość nie będziemy zwracać Message
i teraz żeby przerobić tę funkcję na taką która będzie
strumieniem czyli nie wiadomo jak dużo tych wiadomości przyjdzie a wystarczy
dopisać tutaj Stream stacja i już jest gotowe.
Wtedy wiemy że na pewno będzie to takim wiadomości.
No i mamy trzecia metoda Get Message historię i ona będzie taka cała lista
historii dla danego identyfikatora i pozwól że ja tutaj po raz kolejny użyję
tego czego przygotowałem czyli napisanych przeze mnie funkcji
i wytłumaczyć dlaczego takie decyzje podjąłem.
Oczywiście mamy Send message i tutaj
wysyłamy Send Me jest dokładnie tym samym czyli Send Me do kogo i wiadomość
następnie mamy Google kropka w kropkę i czym to jest im pokazujemy paczkę Google.
Slash protokół Flash.
To znaczy to oznacza po prostu pusta wiadomość
jeśli chodzi o subskrypcję do czatu to tutaj będzie dokładnie to samo czyli po
prostu będzie Google kropka protokół skrypty on wzbogaca.
I tu będzie stream Message i czym jest Message Stream message.
To jest coś w rodzaju Jeśli pracujesz w innych językach to jest
po prostu zbiór elementów które mogą wystąpić w tym
przypadku Stream Message To może być jedno z I to może być Józek.
To może być lista i to mogą być wiadomości
jako długie czyli mógł być albo to albo to.
I za każdym razem to możesz znać jak dużo
wiadomości typu wiadomości chcesz żeby one były obsługiwane i czym jest lista lista
to jest nic innego jak usługa jest która zawiera użytkowników a użytkownik to jest
Józek ID nam ilości czyli informacje o użytkowniku dlatego że wysyłamy informacje
do pod konkretny identyfikator więc aplikacja
musi mieć listę użytkowników którzy aktualnie są dostępni do ratowania.
No dobrze mając trzy metody teraz musimy wygenerować naszego klienta
od nowa więc wchodzimy do naszego terminala wchodzimy do poprzedniego
katalogu i szykujemy naszą metodę której użyliśmy wcześniej uruchamiamy i znowu
tutaj uruchomi nam się to i wygeneruje w naszym katalogu musimy usunąć stare pliki
i przenieść te nowe do tego katalogu który mieliśmy.
Następnie usunąć niepotrzebny katalog jeśli wejdziemy do naszego pliku
startowego krótkiego to zobaczymy po wyjeździe na samą górę że niestety.
Ale to nam się nie powinno skomplikować
dlatego że Józek od teraz posiada dwie trzy metody
a powinien posiadać cztery albo i pięć metod co jest bardzo dziwne.
Może dlatego że nie zapisałem tego pliku
więc zapisujemy go i generuje my jeszcze raz zobaczmy czy.
Tym.
W przypadku się wygeneruje 19 to jest dosyć ciekawe dlaczego tak się stało.
Dlaczego tak się stało dlatego że to ma tutaj taką paczkę musimy zmienić
paczkę na kurs 1 usunąć to co zostało wygenerowane i wygenerować jeszcze raz.
No i znowu mamy kurs 1 więc usuwamy stare
pliki i przenosimy nowe do odpowiedniego katalogu.
Usłyszymy stare foldery i zobaczymy że tutaj mamy błąd.
Dlaczego.
Dlatego że nasz serwis
posiada od nas trzy dodatkowe metody które musimy zaprezentować.
Weźmy sobie w takim razie na sam dół oddzielne to niech to będzie nasz czas
i my tę metodę i uzupełniamy to że to te metody należą do naszej struktury
jak PiS sektor to oczywiście im prezentujemy je w jakikolwiek sposób.
Tak żeby Gosling był w stanie się skompletować.
Czyli po prostu nic z każdej funkcji.
A tutaj jest ponad jedna.
No dobrze mamy już zaimplementowane nasz powiedzmy czat więc zacznijmy od tego że
musimy dopisać logikę czyli do naszego Józek musimy dopisać wysyłanie wiadomości
pobieranie historii wiadomości i chyba z tego co
mi się wydaje to chyba tyle będzie wystarczająco dlaczego wysyłanie
wiadomości dlatego że chcielibyśmy aby była możliwość zapisywania tych wiadomości
w bazie tak aby jeśli użytkownik wejdzie do aplikacji to mogą zobaczyć wiadomości
które zostały do niego wysłane nawet w momencie kiedy on nie jest dostępny.
Wróćmy więc do naszego User Service czyli
do pliku serwis krótkiego i tutaj jeśli chodzi o czat musimy dopisać
dwie metody czyli do metod Messenger i
metody GET Message żebyśmy mogli dopisać te metody musimy
mieć nową nową strukturę która będzie również w bazie danych czyli musimy dodać
naszym Message in message to będzie to model czyli to będzie już w bazie danych.
I tutaj chcemy wiedzieć że to będzie od kogo.
I to będzie typu int.
Chcemy wiedzieć do kogo jest ta wiadomość wysłana.
Chcemy znać datę tej wiadomości to też będzie im wcześniej to będzie po prostu
Times i musi być dłużej i niech to będzie sama wiadomość czyli
Message czyli tekst i to będzie nasz string.
No dobrze jak mamy już wiadomość
no to musimy pamiętać o tym że musimy stworzyć tabelę jeśli istnieje i
dostosować ją do odpowiednich do odpowiednich nazw.
Ale zanim jeszcze zrobimy tzw.
migrację to musimy nazwać i być pewni że nazwie te pola bardzo.
Bardzo dobrze czyli w sposób w jaki chcemy
żeby nazwał to będzie front to będzie to to będzie a to będzie tekst No
teraz do pliku miękkiego i zróbmy tę migrację na samej górze mamy coś tak jak
automat Gate I tutaj mamy naszego użytkownika to po przecinku dajmy
Józek kropka Message mamy już z dla naszego użytkownika więc
wróćmy do naszego pliku model z kropką i mamy tutaj naszą wiadomość teraz musimy
dostosować naszą bazę tak aby łatwo się tego używało więc musimy tutaj dopisać
funkcje dotyczące czatu więc to piszemy tutaj
dwie metody jakich metod będziemy potrzebowali będziemy potrzebowali metody
na stwórzmy wiadomość i to będzie nasza message.
Może to zwrócić błąd i chcemy Great
Message History chcemy tutaj od kogo chcemy pobrać do kogo wiadomości chcemy
pobrać to też może zwrócić błąd ale to też może zwrócić tablice
wiadomości czyli to może być tablica wiadomości lub błąd.
Zaimplementowane te metody na samym dole na samym dole skupiłem Józek i
do dwóch świadomości tak żeby zaimplementowane interfejs zwróćmy tutaj
po prostu brak błędu a tutaj zwróćmy pustą tablicę i brak błędu.
To dobrze żeby wysłać wiadomość.
To wystarczy.
Tak naprawdę wystarczy użyć naszego naszej bazy danych metoda klient.
I wrzucić tam naszą wiadomość.
To może być oczywiście błąd więc musimy sprawdzić ten błąd występuje z World.
Jest to ten błąd
a jeśli nie wszystko jest OK i w przypadku pobierania wiadomości to będzie coś
takiego czy też nie zrobiłam i nic nie zrobiłem literówki.
Tak więc chcemy pobrać od dołu Wszystkie
wiadomości które są dostępne żeby to zrobić.
No to musimy zrobić zapytania czyli jakiś tam wynik tego zapytania.
Mamy uczyć Józek informatyk debili kropka
Find znajdź wszystkie wiadomości które i tu będą message.
Musimy zagrać tablicę naszej wiadomości i to będzie miejsce.
I teraz to będzie warunek czyli chcemy żeby stron
było równe czemuś i tu było równe czemuś czyli to będzie nasza frontu będzie nasze
tu jeśli rezultat jest lat to jak powinny pamiętać musimy
sprawdzić czy rezultat jest taki sam jak Gordon.
Jego rekord trwa.
Czyli jeśli nie znajdziemy żadnych wiadomości to tak naprawdę to nie jest dla
nas błąd to jest po prostu brak wiadomości czyli brak błędu.
A jeśli to jest innego rodzaju błąd to
zwracamy pusty pustą tablicę wiadomości i ten błąd który został złapany.
A jeśli wszystko jest OK to wracamy wtedy po prostu wiadomości.
No dobrze mamy zaimplementowane naszą bazę danych wracamy w takim razie do serwisu
i tutaj żeby wysłać wiadomość no to musimy wysłać wiadomość że Józek kropka message.
Tylko że my nie wiemy od kogo do kogo.
My wiemy tylko nie MY WIEMY OD KOGO Do kogo więc po
prostu chcemy wysłać Message może się to nie udać i tutaj chcemy pobrać internet.
I to oznacza.
Tutaj popełniłem błąd dlatego że w pliku
model skrypt dałem int a identyfikator użytkownika to find.
Więc róbmy to w ten sposób i
wróćmy sobie że chcemy pokazać historię wiadomości od do i teraz masy lub błąd.
No dobrze to skoro mamy coś takiego to musimy zaimplementowane te dwie metody.
Robimy to w znany sposób czyli po prostu kupujemy to co dzieje się w kraju a my
tutaj opisujemy że to należy do naszego języka serwisu.
Tutaj wracamy do błędu zaraz tutaj prezentujemy.
I w przypadku Get Message historię wracamy.
Puste wiadomości i brak błędów.
To jeśli chcemy wysłać wiadomość to musimy ją uzupełnić czyli jeśli chcemy
mieć na to datę no to będzie Time i Unix i Time i Unix zwraca nam
czas który upłynął od któregoś września 1970 tego któregoś roku albo 1970.
Dokładnie ustawiamy sobie tutaj datę że wysłaliśmy ją teraz
frontu jest uzupełniona i tekst również powinien zostać udostępniony uzupełniony
więc sobie dajemy kolejne lecz nasza wiadomość to
może wystąpić błąd więc musimy sprawdzić czy ten błąd nie jest różny.
A jeśli jest to zwracamy błąd a jeśli nie nie zwracamy niczego.
I tak wygląda wysyłanie wiadomości
a w przypadku pobierania historii to tutaj jest trochę inna zabawa dlatego
że tu musi być from musimy pobrać wiadomości z takiej wiadomości dla
danego użytkownika który miał konwersacji z innym
użytkownikiem więc musimy pobrać wszystkie wiadomości które wysłałem ja np.
do Ciebie i muszę pobrać wszystkie
wiadomości które te wysłał do mnie i wtedy musiałem muszę je połączyć i
postępować żeby było zgodnie z tak zgodnie z czasem kiedy zostały wysłane.
Tak więc powiedzmy sobie from rules.
Tu może wystąpić oczywiście błąd
i to bierzemy m.in. jako pakiet czy historię tutaj przepisuje frontu.
I tutaj Google zgłasza nam że chcemy użyć point in
message History powinno być nie ale to musimy też poprawić naszym
implementację interfejsu i wracamy do naszego serwisu.
Już błąd nie jest zgłaszany więc pobieramy też tytuł message.
In jest i tutaj zmieniamy kolejność
tak żeby było dobrze i sprawdzamy czy błąd język można odnaleźć.
Zwracamy pustą historię wiadomości
chcemy ten błąd dobrze mając i tu stwórzmy zmienną Holmes
która to będzie a jakże tablice wiadomości i tak musimy się po bójmy się po to.
W jaki sposób to zrobić.
Bardzo prosto wystarczy użyć pętli FOR i tu będzie for nic.
I to będzie Message i to będzie change from message.
I wystarczy tutaj o Message napęd
i do Message wystarczy dodać Message To jest jeden ze sposobów ale jak
zapewne zobaczyła też dokumentacji do funkcji napęd.
Jest coś takiego jak kropka kropka
typ i to oznacza że możemy tutaj klikać całą tablicę.
Jak dodamy do niej trzy kropki na końcu to zostanie to zrobione.
Ten Range więcej można.
Można porównać że to będzie coś podobnego
jeśli zrobimy coś takiego to wystąpi błąd ale jak dodamy trzy kropki
to błędu nie ma i zostanie to dodane na koniec więc zróbmy to w ten sposób czyli
from Message i tu Message to dajmy Tool message.
Albo żeby nie robić nowej zmiennej to
wystarczy że do promesy Jazz dodamy Thomasa jazz i mamy promesy.
Wszystkie wiadomości.
Teraz pozostaje nam te wiadomości potraktować w jakiś sposób sportowa.
No niestety muszę sprawdzić stoczni i Voice of Poland.
I tu trzeba zaimplementowane ten interfejs do tego żeby startować więc
zaimplementowane do masy Jazz czyli tutaj ten interface.
Jak to zrobić w taki sam sposób jak zawsze to robimy czyli message.
I to jest nasza pierwsza funkcja.
Naszą główną funkcją jest las i złap.
To jest na początku zero a tu zwróćmy.
No dobrze długość tej wiadomości a nie możemy sugerować pojedynczej struktury
tylko musimy przygotować wiadomości czyli musimy message.
I to jest.
Tablica Message czyli możemy to Message czyli do tablicy i tu będzie LAN m.
Tu będzie las czyli czy jakaś wiadomość
jest mniejsza od drugiej czyli po prostu czy m m i data.
Jest mniejsze od m.in. J.
Dlaczego tak dlatego że takt jest
wartością ilością sekund które upłynęły od 1970.
Więc jeśli coś jest starsze to ma po
prostu mniejszą datę i mniej sekund upłynęło od tej daty.
Dlatego w ten sposób to wygląda najsłabsza i równa się J.
I to powinno działać tylko musimy do tego
typu przerobić naszą tablicę wiadomości na message.
Tak więc wchodzimy do naszego serwisu z powrotem.
I tutaj from Jazz get my możemy przerobić żeby zwracał po prostu message.
I tu też musimy to zaktualizować.
Jak już zwraca to Mercedes to po prostu from my możemy z paczki Ford.
Po co ratować to mięso czy gotowane Wszystkie wiadomości
które zwracamy do użytkownika i mając serwis który zwraca
wszystkie wiadomości to jest wyzwanie jest na wyrost
więc musimy sprawdzić czy jest jakiś błąd jeśli jest tak
dobrze to jeśli mamy zaimplementowane pobieranie wiadomości mamy wysyłanie.
Wróćmy do naszego serwisu.
To tak żeby wysłać wiadomość to najpierw musimy mieć jakieś połączenia
czyli musimy najpierw zaimplementowane tą subskrypcję do czatu.
Zauważ że tutaj jest MP a jako drugi parametr mamy Józek z serwisu
czat serwer sobie jako mp3 i to jako subskrypcję.
To jest nasza subskrypcja.
Teraz naszą subskrypcję jest tak naprawdę
połączenie i ono ma tutaj Send message itd.
Czy możemy wysyłać za pomocą
tej zmiennej możemy wysyłać wiadomości ME mamy Stream Message Stream message.
Zobaczymy czym jest stream Message i wejdziemy do środka to zobaczymy że to
jest Body to Body to jest i z czym jest to i Screen Mode to jest
interfejs który implementację ma mieć funkcję Screen body
i ten interfejs jest nim prezentowany przez team Master List i Screen Message
czyli albo możemy wysłać wózek na listę albo możemy wysłać listę wiadomości.
Tak więc jeśli ktoś się za subskrypcję do
naszego czatu to mamy dostęp do jego subskrypcji więc musimy ją gdzieś
przechować tak aby inny użytkownik mógł wysłać do innego użytkownika wiadomość.
żeby to zrobić najprostszym sposobem jest
w naszej strukturze dodanie kolejnego pola który będzie się nazywał
subskrybentów i niech będzie to mapa mapa czego mapa identyfikatorów
użytkowników i ich subskrypcji czyli to będzie serwis.
To będzie ten typ czyli to będzie Józek serwis podkreślenie
serwera czyli to będzie ten typ czyli czy jeśli będziemy mieli użytkownika o
identyfikator to pod kluczem będzie 7 i to będzie jego połączenie.
Zaraz się to wszystko wyjaśnię więc na
początku możemy do naszych subskrypcji pod identyfikator użytkownika którego w tym
momencie nie mamy i jak możemy go pobrać możemy go pobrać z kontekstu
w jaki sposób gdzie jest kontekst kontekst czyli kontekst.
Tak więc żeby pobrać identyfikator użytkownika tworzymy zmienną lub błąd i w
naszym serwerze mamy taką metodę autoryzacji
i w tej metodzie mamy kontakt z klientem kontekstem.
Dzięki temu ta metoda.
Tak tylko gwoli przypomnienia pobiera
Jane Access Token sprawdza czy istnieje jeśli nie to zwraca błąd.
Tak więc wróćmy do naszej metody.
Mamy już Józek ID więc pod kluczem Józek ID umieszczamy naszą subskrypcję.
A następnie
czyli TAK po zalogowaniu czyli po chęci dołączenia do czatu sprawdzamy czy
użytkownik ma uprawnienia żeby to zrobić jeśli nie ma czyli jeśli błąd występuje
czy nie równa się źle to tu zwracamy ten błąd czyli wystąpił po prostu błąd.
Ale jeśli się uda
to przypisują tę subskrypcję do użytkownika a następnie
co musimy zrobić musimy poczekać aż ta subskrypcja się zakończy.
Czyli mamy subskrypcję. Kropka.
I tu mamy coś takiego jak kontekst kropka Don Tan i tu mamy coś tak jak
czarny i pusta struktura i wywołuje coś takiego.
Czekamy aż subskrypcja się zakończy.
Po to jest strzałka strzałka po prostu
oczekuję na zakończenie tej subskrypcji i po zakończeniu
musimy z naszych subskrypcji usunąć klucz czyli musimy usunąć czyli.
Tutaj przekazujemy mapę i przekazujemy klucz czyli to nam usunie klucz
wraz z zawartością z naszej mapy i tutaj usuwamy i zwracamy brak błędu.
No dobrze czyli mamy przechowywanie subskrypcji to teraz po połączeniu z
użytkownikiem chcemy wysłać aktualną listę dostępnych użytkowników.
W jaki sposób to zrobić.
Chcielibyśmy wysłać list do użytkowników wraz z ich imionami imionami i nazwiskami
tak żebyśmy tak żeby łatwo i szybko aplikacja była w
stanie wyświetlić do kogo chcemy napisać wiadomość.
Więc stwórzmy sobie taką funkcję
pomocniczą to będzie gwiazdka Józek jak PiS serwer i Senat inaczej.
List bo już zresztą.
Za pomocą tej funkcji będziemy pobierać listę dostępnych użytkowników.
W jaki sposób to zrobić.
Bardzo prosto wystarczy że ta funkcja po prostu zwróci uwagę listę a Uwaga lista to
jest nic innego jak naszym celem jest struktura która zawiera użytkowników
czyli józek A Józek to w zasadzie możemy zwrócić listę.
A nie jest lista i Józefa
żeby lista dostępnych użytkowników musimy pobrać z subskrypcji.
Nasze klucze
tutaj Visual Studio ok to automatyczna wygenerował klucze z naszych subskrypcji
i zrobiłem to w ten sposób poprzez kropka Kids
i on automatycznie wygenerował forma subskrypcji to wszystkie klucze i mamy
tutaj wszystkie klucze klucze to jest u i to jest lista
więc możemy to zoptymalizować w taki sposób że w momencie kiedy i tak
mamy tutaj klucz to dla tego klucza możemy pobrać użytkownika pobieranego oczywiście
z naszego serwisu i to jest w gestii Józek info.
I tutaj jest nasz.
Czyli dzięki temu możemy po prostu dać Józek.
I to może być nasze spadki Józek Józek info.
I to będzie nasza tablica.
I wystarczy że po bierzemy to to może
oczywiście zwrócić nam błąd więc jeśli błąd jest od
to po prostu mijamy te pętlę czyli kupujemy kupowanie Continuum powoduje że
już nie będziemy wykonywać 120 dzienniki tylko po prostu przejdziemy do następnego
klucza i mając już takie info wystarczy że pójdziemy to na użytkownika więc stwórzmy
po prostu Józek Józek ten który już chcemy.
Stwórzmy mapę user która to będzie już naszym faktycznym użytkownikiem.
Zobaczmy czego on wymaga on wymaga żeby to było już właściwe i te trzy pola.
Służby IT powiedzmy sobie
identyfikator który nie jest tutaj wzbogacony więc żeby go zwrócić to musimy
zmodyfikować kod Józek Józek info i tutaj będzie.
To będzie weekend i to będzie polegać.
IT.
żeby to zrobić to musimy też zaktualizować nasz serwis który w tym miejscu
ma pojemność identyfikator to wpisujemy w tym momencie tak żeby to
pole było też zmontowane No dobrze czyli mając już info pole IT i wracamy do
naszego serwera i do pola Józek
opisujemy nasz identyfikator pola name Wykorzystujemy tutaj
kropkę nad i do nas wpisujemy Józek kilka lat mamy jeszcze
kilka lat tutaj nie chcemy więc nie wpisujemy że mamy zmasowanego użytkownika
wykorzystamy go jakoś to jest jeszcze jakiś błąd dlatego że
64 kupujemy go na 64 zgodnie z wymaganiami i teraz Google zwraca nieużywane zmienna
oczywiście więc users równa się happy end Józek i Matt i
rodzajów map user wpisujemy na koniec tej tablicy nowego
użytkownika to jak mamy listę użytkowników które są dostępne to po prostu zwróćmy.
Mamy listę dostępnych użytkowników.
No to teraz może zróbmy coś takiego że jeśli użytkownik jeśli nowy użytkownik
dołączy do czatu to wyślemy do wszystkich użytkowników informację że nowy użytkownik
dołączył do czatu tak aby aplikacja wiedziała że pojawił się nowy użytkownik.
Tak więc stwórzmy nową funkcję wyślij
listę dostępnych użytkowników wyślij listę wszystkich dostępnych użytkowników.
I dzięki temu do wszystkich subskrybentów wyślemy listę użytkowników więc pobieramy
listę użytkowników czyli będzie układ list Apple i tu dostajemy listę zgłaszany błąd.
Czy jest nieużywane.
To już jest używana powiedzmy lista
użytkowników więc teraz tak wszystkie subskrypcję są.
For.
Powłoka nie działa więc musimy go.
Nie chcemy mieć indeksu chcemy mieć subskrypcję.
Jest lepszy i to musi być gangu.
Tu będzie ki i tu będzie
to ki to jest identyfikator użytkownika a jego subskrypcji klucza nie potrzebujemy
potrzebujemy subskrypcję i do tej subskrypcji wysłać z
Message in message i tu będzie drugim miejsce czyli wysyłamy listę.
Ta lista to jest lista czyli guzik lista
usług lista to jest po prostu lista użytkowników.
No to stwórzmy tę listę tutaj.
Józef.
I tu przecinek nie zadziała to w ten sposób tak więc tu
będzie jeździł z listy Józek po prostu a jest to list więc czy będzie list.
Już list w tej liście jest Józek.
Czyli Józek.
Tu jeszcze wymagane przecinek.
A to jest.
Aha czyli to jest nie tablica użytkowników ale to jest
tablica Point Of do użytkowników czyli stąd musimy zwrócić.
Czyli różnica jest taka że tu zwracamy Point tak więc tutaj wracamy
bo takie są wymagania i jest nie używana wiadomość więc wiadomość możemy tu wysłać
ale wiadomość nie jest stream Message więc musimy robić z tego Screen message.
I Body wysłać naszą wiadomość ale wiadomość to powinny
być wysłane do wszystkich użytkowników do wszystkich naszych subskrypcji czyli do
wszystkich użytkowników którzy są podłączeniu pod nasz sektor aktualnie.
No dobrze to w takim razie myślimy Wyślij
to do wszystkich użytkowników czyli mamy list o list.
Tu o awarii ale do wszystkich dostępnych
użytkowników więc wracamy za czat i po dodaniu subskrypcji do naszej mapy
dajemy sobie ub.r. Send list tu o users czyli po podłączeniu.
Sprawdzamy czy użytkownik ma uprawnienia jeśli ma.
Dodajemy go do naszej listy subskrypcji następnie wysyłamy do wszystkich
użytkowników informację że dołączył nowy użytkownik.
Czekamy aż to połączenie zostanie
zakończone jeśli zostanie zakończone to usuwamy tego użytkownika.
No i przydałoby się też wysłać do
wszystkich użytkowników informację że ten użytkownik już nie jest dostępny.
Dobrze mamy subskrypcję zrobioną.
To może zróbmy wysyłanie wiadomości
wysyłanie wiadomości to jest nic innego jak znalezienie
naszych subskrypcja odpowiedniego użytkownika i wysłanie mu tej wiadomości.
Czyli musimy tak najpierw wziąć naszą subskrypcję i znaleźć w niej pod kluczem.
Trochę tutaj Request traktuje tekst czyli kontekst.
I tutaj w tym naszym mieście znajduje się wiadomość do kogo chcemy wysłać.
Na tej podstawie możemy określić
to chce wysłać ale żeby wysłać wiadomość też musimy się zainteresować
czyli najlepiej jeśli chcemy wysłać wiadomość sprawdzamy czy ten użytkownik
istnieje i jakie ma identyfikator czyli musimy z kontekstu wyciągnąć jego
uzasadnienie jeśli nie zwrócić błąd czyli wracamy w błąd.
A jeśli mamy jego informacje to musimy
wysłać wiadomość do tej osoby do której chce jeśli ona istnieje.
Czyli to będzie tu.
I tu mamy regres tu i tu jest.
64 to nie jest weekend więc musimy przekonać się na weekend.
Jeśli już mamy to i to to może być.
To musimy sprawdzić ten klucz istnieje jeśli nie istnieje.
Jeśli nie istnieje to co się stanie nie jestem pewny co się stanie więc zobaczymy.
Jeśli będziemy tego używać jeśli mamy tu subskrypcję.
To tu możemy wysłać mu wiadomość więc musimy ją przygotować najpierw
więc jeśli chcemy wysłać wiadomość to jak tutaj przygotowywaliśmy wiadomość w ten
sposób że mieliśmy listę czyli Master List.
Będzie też Stream Message to będzie Message czyli będzie stream Message
Message czyli nie będzie Message tylko będzie
Message czyli będzie to tablica wiadomości Message a Message to jest
Message czyli to jest tablica tablica Message a Message from to daje tekst.
No to stwórzmy sobie najpierw miasteczko.
Czyli to będzie Message a message ma tekst.
Czyli to będzie from.
Od kogo od USA right.
Do kogo to tu będzie request.
Tu date.
Gdzie tam na Unix i wiadomość czyli text to będzie request.
Tekst czyli mamy naszą wiadomość
teraz potrzebujemy stworzyć następne Jazz czyli to będzie pole.
Miejsce czes. .
I tu będzie nasze miejsce.
A w środku będzie tablica wiadomości czyj to będzie cyrk gwiazdka Messiego.
I tu musimy podać Messiego że Blatter jest więc teraz musimy zrobić z kim.
I w środku to jako Body to będzie nasze body i tu będziemy Jazz
które musi być oczywiście wskaźnikiem i teraz wysyłamy wiadomość
do kogoś czyli jeśli my wysyłamy wiadomość to ona do tej osoby dojdzie.
Teraz musimy wysłać wiadomość i ta wiadomość powinna do nas też przyjść jako
potwierdzenie że to my ją wysłaliśmy ona dotarła.
Została zbudowana i ona przychodzi do nas
jako potwierdzenie więc teraz musimy zrobić from.
Jeśli oczywiście nasz from istnieje w lepszym.
I tutaj będzie kropka.
I to pod kluczem.
Pod kluczem Józek ID czyli to będzie nasze
i kropka sen tutaj musimy wysłać dokładnie tą samą wiadomość więc wyciągniemy z.
Message.
I na wszystkim będzie wysłane do i od.
I teraz.
Musimy sobie popatrzeć ta mapa
i ma tutaj subskrypcję A co jeśli nie będzie to może być Noblem
czyli tu powinien być wskaźnik dlatego że nie chcemy kupować tej
subskrypcji ale chcemy ją po prostu mieć i on też może być Lem czyli
może i po prostu nie być pod jakimś kluczem.
Tak więc wróćmy do naszego message.
Tu musimy ją przerobić na normalną subskrypcję i wysłać wiadomość.
Jesteśmy tego pewni dlatego że i tak czujemy się po wszystkich
istniejących klubach a wyżej musimy przekazać wskaźnik a tutaj.
Musimy sprawdzić czy i tu
jest różnorodność jeśli jest różnorodność to wtedy możemy
przerobić więcej na faktyczną subskrypcję i to samo możemy zrobić w tym przypadku.
Jeśli jest różna od.
To wtedy.
Możemy wysłać wiadomość jeśli istnieje
ale czyli mamy wysyłanie wiadomości mamy próbowali się do czatu.
Jeszcze nie mamy pobierania historii wiadomości dla konkretnego użytkownika.
No dobrze to to w takim razie czy to będzie kontekst.
I co mamy zapytania zapytanie zapytanie mamy Józek ID.
Czyli to będzie kogo wiadomości chcemy
pobrać a from to będzie pobierane z autoryzacji czyli na
autoryzację to będzie from just the middle i to będzie to use it.
Czyli chcemy pobrać przez tego Użytkownika
pobieramy tę wiadomość i z kontekstu czyli tu będzie i możemy zwrócić.
Brak wiadomości z błędem
bądź pobrane wiadomości które pobieramy z serwisu Get It to jest.
I tu będą wiadomości czyli Message lub błąd.
Oczywiście jeśli wystąpi błąd to zwracamy puste listy i zwracamy ten błąd.
A jak wszystko jest OK to zwracamy nasze wiadomości w odpowiedzi
ale wiemy że to nie są te Message więc musimy to smakować.
Więc kupujmy to.
Stwórzmy.
Zmienną rejs po
raz piąty w której będą nasze wiadomości tak boimy się po wszystkich wiadomościach
które zostały zwrócone czyli Four Index Message in message.
I tu mamy pojedynczą wiadomość i teraz response.
Równa się napęd sponsor.
Message To jest obiekt więc musimy do wiadomości w środku.
Dopisać Messiego.
Czyli to będzie taka struktura.
Tu też pole do środka będziemy wpisywać i
dopisywać więc tu będzie Message in message z frontu tekst czyli from.
I od kogo. Czyli message.
Message from.
To będzie do kogo ta wiadomość była message.
Tu.
To będzie DJ czyli to będzie Message
Kropka nad i na końcu będzie tekst czyli tekst message.
Tekst.
I mamy już zmasowane nasze wiadomości na
odpowiedź więc tę odpowiedź zwracamy ale tutaj
mamy zwrócić wskaźnik do wiadomości a nie gotowość więc robimy tego wskaźnik
i mamy pobraną historię wiadomości danego użytkownika.
I wygląda na to że mamy subskrypcję do czatu mamy wysyłanie wiadomości i mamy
pobieranie historii tych wiadomości bo kochamy to i zobaczmy czy to
ma w ogóle szansę działać po uruchomieniu które tak troszkę trwa.
Możemy sobie uruchomić.
Nasz bloger napisali zobaczymy że tutaj
mamy dalej tylko trzy wiadomości wzajemnie gotujemy sobie jeszcze raz ten
serwis kropka to i doszły nam tutaj trzy nowe wiadomości.
Wykorzystując ten akces token
który został wygenerowany dla użytkownika o e-mailu Hello.
Hello.
Idąc tym tropem możemy spróbować czy to faktycznie działa.
Działa pobiera nam to jeszcze raz i możemy wysłać wiadomość np.
do jakiegoś tam użytkownika o jakimś
tekście nie wiemy jaki identyfikator ma ten użytkownik więc musimy
obawiać się do czatu zasób spróbujmy się do czatu i zobaczmy co
się dzieje wyskoczył nam błąd w linii 133 dlatego że subskrypcja nie istnieje.
A nie ma.
Czyli nasza mapa to jest
tak jak sobie wejdziemy na samą górę to zobaczymy że przy tworzeniu naszego
serwisu naszego i ciekawego to powinno być.
Mamy serwis ale nasza mapa jest
musimy ją stworzyć i tworzymy mapę w bardzo prosty sposób
czyli trzeba przepisać mapę którą to mamy serwis.
Przekonujemy ją może.
I na końcu trzeba dać plamy.
Nawiasem.
Do pliku go uruchomimy jeszcze raz i po uruchomieniu naszego serwera.
Wróćmy do naszej aplikacji Bloomberg PC.
I w momencie kiedy spróbujemy się zasób
skorygować na czas jeszcze raz zobaczymy że dostaniemy listę użytkowników.
I możemy wysłać wiadomość do użytkownika o identyfikator.
8. Tak też spróbujemy zrobić czyli
przechodzimy do Send message i do identyfikatora 8 chcemy wysłać wiadomość
Hello from czyli wysyłamy do niego wiadomość.
I zobaczymy że ta wiadomość albo ta metoda nie została
zaimplementowane co jest stosunkowo dziwne.
Message.
Przejdźmy do naszego sektora i zobaczmy co się stało.
I tutaj w centrum też subskrybentów czat.
Przejdźmy na sam dół i zobaczymy że wracam tutaj nie możemy wracać.
Nawet jeśli to jest FPP więc musimy po
prostu wziąć spadki FPP i zwrócić po prostu pusty obiekt.
Zamkniemy to i uruchomimy jeszcze raz w pliku machinę krótkiego.
A następnie przejdźmy do naszego blogera
i wyślemy tę wiadomość jeszcze raz i zobaczymy że wiadomość została wysłana.
Tylko problem polega na tym że żaden użytkownik nie jest.
Nie kupuje więc jeszcze raz spróbujemy wysłać tę wiadomość do użytkownika.
8. Wyślij moją wiadomość została wysłana.
Zobaczmy czy doszła tutaj w przypadku blogera możemy zobaczyć
że tu są Stream jako Stream drugi została przyszła do nas wiadomość
z taką datą od użytkownika o identyfikator 8 do użytkownika o identyfikator 2:8 z
taką wiadomością tylko że przyszedł do nas też trzeci Stream taki sam.
Dlatego że wysłaliśmy od tego samego
użytkownika do tego samego użytkownika tym samym identyfikatora
żeby to naprawić żeby ta wiadomość mimo wszystko przyszła do nas tylko raz musimy
przejść do funkcji Send Messenger i upewnić się że od użytkownika wyślemy
jeśli jest to numer i Józek ID czyli nasze od
do jest różne czyli nasz identyfikator użytkownika od którego wysyłamy wiadomość
jest różny od użytkownika do którego wysyłamy wiadomości.
To będzie request.
Tu jeśli jest tak różne to wyślemy wiadomość a jeśli nie to wyślemy wiadomość
tylko raz uruchomimy na naszą aplikację raz jeszcze i zobaczmy czy to działa.
Wracamy do naszego blogera musimy się jeszcze raz spróbować nawet
na wiadomości więc Słupsk boimy się i wysyłamy wiadomość do identyfikatora 8.
Wiadomość została wysłana wracamy do
naszej subskrypcji widzimy że to jest tylko Stream 2 z wiadomością.
Tak więc robiliśmy już
nasz serwer ale potrzebujemy jeszcze zrobić taką jedną rzecz sprawdzić czy z
takiej wiadomości działa chcemy pobrać wiadomości dla identyfikatora 8.
No i widzimy że tutaj niestety zostaje zwrócony błąd.
Dlaczego.
Dlatego że w przypadku tego nie
jest error to znaczy że nie działa nam pobieranie z wiadomości czyli fragmentu.
Niestety nam nie działa.
Dlaczego nie działa a nie działa.
To dlatego że metoda Find
nie może przyjmować dwóch argumentów jako do wypełnienia.
Dlatego musimy tutaj dodać kamerę
a następnie tutaj kopiować te odpłatnie to miejsce a następnie użyć tutaj dokładnie
jak zabijamy nasz serwer i uruchomimy jeszcze raz.
A następnie spróbujemy po raz kolejny pobrać strumień wiadomości.
To po raz kolejny zobaczymy że Polska from Message
Noll dlatego że nie mamy zapisu wiadomości do użytkownika bo zapomnieliśmy wysłać tej
wiadomości do bazy danych dlatego musimy wrócić do Send message.
Jeśli wysyłamy tę wiadomość już do
subskrypcji to na końcu możemy również wysłać do naszego serwisu czyli to byłoby
Send Me czyli tu jesteś user Message to message.
To jest nasz Józek Message i stwórzmy tę wiadomość.
To będzie from.
I to będzie bezpieczne.
Czy grupka from.
To miejsce tu data to też będzie Message
Kropka nad i tekst to będzie kropka.
Tekst tutaj mamy nasz język
wysyłamy go jeśli wystąpi błąd to co możemy z tym błędem zrobić.
Tak naprawdę możemy go zwrócić z tego
zapytania i to będzie chyba najlepszy pomysł.
Jeśli jest błąd to wtedy zwróci.
I to dobrze do tego sprawdzimy czy wysyłanie
wiadomości działa i czy działa pobieranie historii tych wiadomości.
Po uruchomieniu przechodzimy z powrotem do
naszego bloga Słupsk próbujemy się do czatu.
Mamy identyfikator 8
wysyłamy naszą wiadomość możemy ją wysłać kilka razy
tak żeby czyli powinno być raz 2 3 4 5 6 wiadomości wysłaliśmy więc po bierzemy
historię wiadomości to powinniśmy dostać tutaj
trzy różne wiadomości i niestety znowu dostajemy błąd dlatego że
jest to bólem zobaczmy co się dzieje w bazie danych.
Spróbujmy to naprawić.
Czy mamy nową tabelę mamy nową tabelę
i mamy sześć wiadomości wysłanych mamy tutaj from i tu mamy from i tu i mamy
wysłane nawet o różnej sekundzie ale prawie dokładnie ten sam czas.
No dobrze spróbujmy w takim razie
jeszcze raz zmienić to zapytanie z takiego na jakieś inne to znaczy jakie.
Innym sposobem na tworzenie zapytań jeszcze jest coś takiego że jeśli do
środka wrócimy mapę która będzie miała jako klucz jako wartość np.
link ją stworzymy to jako klucz możemy podać from.
I niech to będzie from i jakoś
tu podane tło to też jest jeden ze sposobów w jaki możemy tworzyć zapytania.
Tak więc spróbujemy tego sposobu
krótkiego i jeszcze raz spróbujemy pobrać historię miłości do danego użytkownika i
to zobaczymy że sequel konwergencji kilku map.
No dobrze to zamieniły w takim razie to na.
Infrastrukturę drogową zamiast Wind pusty interfejs i uruchomiono jeszcze raz.
Może tym razem to zadziała.
Tak i jeśli zmienimy to na pusty interfejs
czyli to będzie klucze to będą String a interfejs to będzie po prostu cokolwiek
czy pustym interfejsem w slangu jest wszystko.
No to zobaczymy że tutaj są faktycznie lista wszystkich wiadomości które zostały
wysłane od użytkownika o identyfikator że 8 do użytkownika o identyfikator że 8.
Problem polega na tym że w przypadku wiadomości wysyłane są od do.
Będą one podwójne
i jeśli chcesz to możesz je wypisywać i obsłużyć taki przypadek jest on dosyć
rzadki aczkolwiek prawdopodobnie będzie on występował więc naszym następnym krokiem.
Jeśli już działa nam historia wiadomości działają nam subskrypcję i wysyłanie
wiadomości będzie pokazanie ci w jaki sposób po implementacji tego np.
w aplikacji mobilnej możemy tego używać.
I tak się składa że ja mam tutaj przygotowane dwie aplikacje mobilne które
używają tego samego schematu plików to jeśli chcemy się podłączyć wystarczy że
podamy host podamy port podamy e-mail i hasło oczywiście
kod tej aplikacji mobilnej będzie dostępne w materiałach do kursu.
Niestety aby uruchomić to to będziesz
musiał mieć komputer z systemem Mac OS ale jeśli zaimplementowane te pliki to np.
Web bądź na przykład na Androidzie
bez problemu będziesz mógł również ich używać.
Na początku musimy stworzyć sobie konto stwórzmy sobie konto z e-mailem np.
z małej litery niech to będzie com niech ma na imię Kamil
jego nazwisko to będzie oczywiście Nowak i hasło to jest QWERTY.
Załóżmy to konto użytkownika i następnie
loguje się na nie czyli Kamil z małej litery.
Małpa James E.coli.
Jego hasło to będzie kubek i spróbuje się zalogować.
Jak widzisz pojawił się czat.
Nie można napisać wiadomości do samego
siebie jeśli wyślemy wiadomość to ona do nas przechodzi.
To w tym przypadku stwórzmy naszego Janka czyli będzie Janek.
Małpa czyli imię to będzie Janek.
Nazwisko będzie Nowak i hasło to będzie warte
i zobaczymy że został stworzony w błąd został zgłoszony dlatego że Janek Champion
już istnieje więc spróbujmy się na niego zalogować.
Na hasło QWERTY jak widzisz zalogowanie
się i w tym przypadku możemy pisać wiadomości.
Jeśli nacisnąć na jakieś nick to zmienia
on na zielony i to oznacza że wtedy piszę wiadomość do tej konkretnej osoby.
No dobrze mamy tutaj Kamila a więc napiszemy do Kamila a my chcemy pisać z
Jankiem więc wyślemy wiadomość do Kamila czyli Hej Janek i Kamil.
Jak wyślemy wiadomość Wiadomość pojawia się na drugim urządzeniu a jeśli chcemy
napisać do odpisać bankowi podpisujemy hasło.
Po zamknięciu czatu i po uruchomieniu czatu na nowo wiadomości się odczytują a
wiadomości się zmieniają w momencie kiedy zmieniamy czas.
Jeśli przejdziemy do historii wiadomości z Kamilem mamy wiadomości dwie wiadomości
dlatego że to jest błąd o którym Cię wspominałem że podczas pobierania
wiadomości oddano do do kogoś pobieramy dwa razy te same
wiadomości jeśli wyślemy je do siebie i dobrze że testowaliśmy to na aplikacjach
mobilnych które przygotowałem dlatego że wyszło że historie wiadomości
źle się pobiera i ja żeby nie marnować twojego czasu sprawdziłem już jaki błąd
popełniłem podczas pisania i jak im prezentowaliśmy sortowanie w
naszych modelach czyli dokładnie te trzy linijki.
No to tutaj został popełniony przeze mnie
błąd dlatego że mamy poznać dwie wartości a nie je napisać.
Jeśli przejdziemy tutaj do trzech sposobów
na sortowanie w go to jest świetny przykład w jaki sposób to zrobić.
Jeśli zamkniemy DNA na taki czyli za i
wymieniamy j a za j i czyli to działa w ten sposób że Google
jednocześnie zamienia te wartości gdybyśmy to podzielili na cztery osobne linijki
przepraszam dwie linijki to to by nie zadziałało dlatego że wartość
napisana potem została jeszcze raz napisana.
Także uruchomimy ten kolor i zobaczmy czy on działa.
I po uruchomieniu jeśli uruchomimy Nasz
czat od początku uruchomi się loguje my jednego i drugiego.
To nasza historia wiadomości działa poprawnie.
Jeśli wyślemy tą wiadomość to faktycznie ona powinna przyjść.
Ale nie przechodzi.
Atak przechodzi ale się nie otworzyło.
No dobrze ale jak widać czad działa.
Wykonaliśmy Czad poprzez protokół że jak PiS
wygra zachowaliśmy nasze naszego klienta i nasz serwer z plików
protokołu i zanim prezentowaliśmy to więc wykonaliśmy nasz projekt w pełni.
Zapraszamy Cię tymczasem do następnej lekcji i do zobaczenia.