uWebSockets.js 
A intenção do nosso protocolo de mensagens e servidor de bate -papo, que são diferentes dos outros, é fornecer uma solução alternativa para o amplo protocolo de mensagens XMPP espalhado (e para ser honesto - o único amplo 'padrão' hoje em dia).
Leia as postagens médias completas que apresentam Sama e o que é Sama sobre o que é Sama e quais problemas estamos tentando resolver com ele:
O App Frontend (Web + Mobile) está disponível em https://github.com/sama-communications/sama-client
Node 18 instalado..env.example para .env .docker-compose -f docker-compose.yml -f docker-compose.development.yml up para executar serviços dependentes (MongoDB, Minio, Redis)npm install para instalar dependênciasnpm run migrate-mongo-up para executar migrações de banco de dadosnpm run start to Run Server (em um caso de execução no Windows - consulte #128)ws://localhost:9001Também existem outros componentes disponíveis na pilha de sama - confira a implantação da pilha de servidores de bate -papo de sama: um guia abrangente
A implantação do aplicativo SAMA pode ser feita facilmente com o Docker, se você deseja uma configuração completa com todas as dependências ou um ambiente local com os principais aplicativos. Abaixo estão as etapas a seguir:
Essa abordagem constrói e executa todo o aplicativo SAMA, incluindo todas as dependências, em um único comando. É ideal para configurar o ambiente completo rapidamente.
Para implantar usando este método, execute:
docker-compose -f docker-compose-full.yml up --build
Para executar os serviços de dependência junto com os principais aplicativos SAMA ( sama-client , sama-server e sama-push-daemon ), use:
docker-compose up --build
SAMA , adicione essas duas variáveis antes do comando de lançamento:
Macos
MINIO_ENDPOINT=$(ipconfig getifaddr en0) MINIO_PORT=9010
Windows
$env:MINIO_ENDPOINT = (Get-NetIPAddress | Where-Object { $_.AddressFamily -eq 'IPv4' -and $_.IPAddress -match '^192.168.|^10.|^172.(1[6-9]|2[0-9]|3[0-1]).' } | Select-Object -ExpandProperty IPAddress)[1]; $env:MINIO_PORT = 9010;
Se você estiver encontrando problemas com anexos no cliente da web, sugere que ocorreu um erro na primeira variável. Para resolver isso, você pode simplesmente atualizar o segmento de código com o endereço IP privado da sua máquina.
Agora você pode acessar aplicativos nos seguintes endereços:
Executar migrações:
docker-compose exec sama-server sh -c "MONGODB_URL=mongodb://172.25.0.4/samatests npm run migrate-mongo-up"
Execute testes E2E:
docker-compose exec sama-server sh -c "MONGODB_URL=mongodb://172.25.0.4/samatests npm run test"
Toda a pilha Sama pode ser testada usando https://app.samacloud.io Cloud Public.
Referência da API
Além disso, há um conjunto de artigos detalhados para cada API:
Um exemplo de como criar e usar o provedor:
Crie app/providers/services/my_provider com 2 arquivos index.js e Provider.js
index.js deve conter a implementação do próprio serviço:
export default class MyProvider {
constructor ( redisConnection , userRepo ) {
this . redisConnection = redisConnection
this . userRepo = userRepo
}
async updateAction ( ws , fields ) {
const id = await this . redisConnection . client . . .
const updatedUser = await this . userRepo . update . ...
... .
return updatedUser
}
}Provider.js deve exportar uma instância do RegisterProvider, que contém instruções como criar uma instância da classe index.js com dependências: import RegisterProvider from "@sama/common/RegisterProvider.js"
import MyProvider from "./index.js"
const name = "MyProvider"
class MyProviderRegistration extends RegisterProvider {
register ( slc ) {
const redisConnection = slc . use ( "RedisClient" )
const userRepo = slc . use ( "UserRepository" )
return new MyProvider ( redisConnection , userRepo )
}
}
export default new MyProviderRegistration ( { name , implementationName : MyProvider . name } )Provider.js ao app/providers/index.js import UserRepoProvider from "./repositories/user/Provider.js"
...
...
import MyProviderRegistration from "./services/my_provider/Provider.js"
const providers = [
UserRepoProvider ,
...
...
MyProviderRegistration
]
export default providers Para quaisquer provedores de APIs personalizados - use /APIs/[API_NAME]/providers/index.js Ohapi_name ]/providers/index.js arquivo:
E agora você pode usar a classe MyProvider , quando necessário, por exemplo, no controlador:
import ServiceLocatorContainer from "@sama/common/ServiceLocatorContainer.js"
class Controller {
async edit ( ws , data ) {
const myProvider = ServiceLocatorContainer . use ( "MyProvider" )
const updatedUser = await myProvider . updateAction ( ws , data )
. ...
}
} Junte -se à nossa comunidade para obter apoio e discussões:
Roteiro
GPL-3.0
Qualquer pensamento, feedback é bem -vindo! Crie um problema do GitHub para qualquer feedback que você tenha.
Quer nos apoiar?