Nauczyłem się małej lekcji (trudna droga). Zrobiłem aplikację do obliczania liczb, która działa w usługach w chmurze Ubuntu AWS EC2 (używa wydajnych procesorów graficznych) i chciałem zrobić dla niej front-end, aby obserwować jej postęp w czasie rzeczywistym. Ze względu na to, że potrzebował danych w czasie rzeczywistym, było oczywiste, że potrzebuję gniazd internetowych do przesyłania aktualizacji.
Zaczęło się od weryfikacji koncepcji i działało świetnie. Ale kiedy chcieliśmy udostępnić go publicznie, musieliśmy dodać sesję użytkownika, więc potrzebowaliśmy funkcji logowania. I bez względu na to, jak na to patrzysz, websocket musi wiedzieć, z którym użytkownikiem ma do czynienia, więc wybraliśmy skrót, używając gniazd sieciowych do uwierzytelniania użytkowników . Wydawało się to oczywiste i było wygodne.
Właściwie musieliśmy spędzić trochę czasu w ciszy, aby połączenia były niezawodne. Zaczęliśmy od kilku tanich samouczków dotyczących technologii WebSocket, ale odkryliśmy, że nasza implementacja nie była w stanie automatycznie połączyć się ponownie, gdy połączenie zostało zerwane. Wszystko się poprawiło, kiedy przeszliśmy na socket-io. Socket-io jest koniecznością!
Powiedziawszy to wszystko, szczerze mówiąc, myślę, że przegapiliśmy kilka świetnych funkcji socket-io. Socket-io ma znacznie więcej do zaoferowania i jestem pewien, że jeśli weźmiesz to pod uwagę w swoim początkowym projekcie, możesz wyciągnąć z niego więcej. W przeciwieństwie do tego, po prostu zastąpiliśmy stare gniazdka sieciowe funkcjonalnością gniazda sieciowego z gniazda-io i to wszystko. (bez pomieszczeń, bez kanałów, ...) Przeprojektowanie mogło sprawić, że wszystko będzie potężniejsze. Ale nie mieliśmy na to czasu. Warto o tym pamiętać w przypadku naszego następnego projektu.
Następnie zaczęliśmy przechowywać coraz więcej danych (historia użytkowników, faktury, transakcje, ...). Przechowaliśmy to wszystko w bazie danych AWS dynamodb i PONOWNIE użyliśmy socket-io do komunikacji operacji CRUD z front-endu do backendu. Myślę, że tam źle skręciliśmy. To był błąd.
- Ponieważ wkrótce po tym, jak dowiedzieliśmy się, że usługi chmurowe Amazon (AWS) oferują świetne narzędzia do równoważenia / skalowania obciążenia dla aplikacji RESTful .
- Mamy wrażenie, że musimy napisać dużo kodu, aby wykonać uzgadnianie operacji CRUD.
- Niedawno wdrożyliśmy integrację Paypal. Udało nam się to uruchomić. Ale znowu, wszystkie samouczki robią to za pomocą RESTful API . Musieliśmy przepisać / przemyśleć ich przykłady, aby zaimplementować je za pomocą gniazd sieciowych. Jednak udało nam się to dość szybko. Ale wydaje się, że idziemy pod prąd.
Powiedziawszy to wszystko, będziemy żyć w przyszłym tygodniu. Dotarliśmy na czas, wszystko działa. Jest szybki, ale czy będzie skalowany?