Aprendi uma pequena lição (da maneira mais difícil). Eu fiz um aplicativo de processamento de números que roda em serviços de nuvem Ubuntu AWS EC2 (usa GPUs poderosas) e queria fazer um front-end para ele apenas para observar seu progresso em tempo real. Devido ao fato de que precisava de dados em tempo real, era óbvio que eu precisava de websockets para enviar as atualizações.
Tudo começou com uma prova de conceito e funcionou muito bem. Mas então, quando queríamos disponibilizá-lo ao público, tivemos que adicionar a sessão do usuário, então precisamos de recursos de login. E não importa como você olhe para isso, o websocket precisa saber com qual usuário ele lida, então pegamos o atalho de usar os websockets para autenticar os usuários . Parecia óbvio e conveniente.
Na verdade, tivemos que passar algum tempo em silêncio para tornar as conexões confiáveis. Começamos com alguns tutoriais de websocket baratos, mas descobrimos que nossa implementação não foi capaz de se reconectar automaticamente quando a conexão foi interrompida. Tudo isso melhorou quando mudamos para o socket-io. Socket-io é um must!
Dito tudo isso, para ser honesto, acho que perdemos alguns ótimos recursos do socket-io. O Socket-io tem muito mais a oferecer e tenho certeza de que, se você levar isso em consideração em seu design inicial, poderá obter mais com ele. Em contraste, acabamos de substituir os velhos websockets pela funcionalidade de websocket do socket-io, e foi isso. (sem salas, sem canais, ...) Um redesenho poderia ter tornado tudo mais poderoso. Mas não tínhamos tempo para isso. Isso é algo para lembrar em nosso próximo projeto.
Em seguida, começamos a armazenar mais e mais dados (histórico do usuário, faturas, transações, ...). Armazenamos tudo isso em um banco de dados dynamodb da AWS e, NOVAMENTE, usamos o socket-io para comunicar as operações CRUD do front-end para o back-end. Acho que pegamos o caminho errado aí. Isso foi um erro.
- Porque logo depois descobrimos que os serviços em nuvem da Amazon (AWS) oferecem ótimas ferramentas de balanceamento de carga / dimensionamento para aplicativos RESTful .
- Temos a impressão de que precisamos escrever muito código para realizar os handshakes das operações CRUD.
- Recentemente, implementamos a integração com o Paypal. Conseguimos fazer funcionar. Mas, novamente, todos os tutoriais estão fazendo isso com APIs RESTful . Tivemos que reescrever / repensar seus exemplos para implementá-los com websockets. Mas conseguimos fazer funcionar bem rápido. Mas parece que estamos indo contra o fluxo.
Tendo dito tudo isso, vamos ao ar na próxima semana. Chegamos a tempo, tudo funciona. E é rápido, mas vai escalar?