uWebSockets.js 
La intención de nuestro protocolo de mensajería y servidor de chat, que son diferentes de los demás, es proporcionar una solución alternativa al protocolo de mensajería XMPP amplio (y para ser honesto, el único 'estándar' amplio en estos días).
Lea las publicaciones medianas completas que introducen a Sama y qué es Sama sobre lo que es Sama y qué problemas estamos tratando de resolver con él:
La aplicación frontend (web + móvil) está disponible en https://github.com/sama-communications/sama-client
Node 18 instalado..env.example a .env .docker-compose -f docker-compose.yml -f docker-compose.development.yml up para ejecutar servicios dependientes (MongoDB, Minio, Redis)npm install para instalar dependenciasnpm run migrate-mongo-up para ejecutar migraciones de DBnpm run start to ejecutar servidor (en un caso de ejecución en Windows - ver #128)ws://localhost:9001También hay otros componentes disponibles en SAMA Stack: consulte la implementación de Sama Chat Server Stack: una guía completa
La implementación de la aplicación SAMA se puede hacer fácilmente con Docker, ya sea que desee una configuración completa con todas las dependencias o un entorno local con las aplicaciones principales. A continuación se muestran los pasos a seguir:
Este enfoque construye y ejecuta toda la aplicación SAMA, incluidas todas las dependencias, en un solo comando. Es ideal para configurar el entorno completo rápidamente.
Para implementar usando este método, ejecute:
docker-compose -f docker-compose-full.yml up --build
Para ejecutar los servicios de dependencia junto con las principales aplicaciones SAMA ( sama-client , sama-server y sama-push-daemon ), use:
docker-compose up --build
SAMA , agregue estas dos variables antes del comando de lanzamiento:
Macosa
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;
Si se encuentra con problemas con los archivos adjuntos en el cliente web, sugiere que se produjo un error en la primera variable. Para resolver esto, simplemente puede actualizar el segmento de código con la dirección IP privada de su máquina.
Ahora puede acceder a aplicaciones en las siguientes direcciones:
Ejecutar migraciones:
docker-compose exec sama-server sh -c "MONGODB_URL=mongodb://172.25.0.4/samatests npm run migrate-mongo-up"
Ejecutar pruebas E2E:
docker-compose exec sama-server sh -c "MONGODB_URL=mongodb://172.25.0.4/samatests npm run test"
Toda la pila Sama se puede probar usando https://app.samacloud.io Public Cloud.
Referencia de API
Además, hay un conjunto de artículos detallados para cada API:
Un ejemplo de cómo crear y usar el proveedor:
Crear app/providers/services/my_provider con 2 archivos index.js y Provider.js
index.js debe contener la implementación del servicio en sí:
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 debe exportar una instancia de RegisterProvider que contiene instrucciones sobre cómo crear una instancia de clase index.js con dependencias: 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 a 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 cualquier proveedor de API personalizado: use /APIs/[API_NAME]/providers/index.js archivo:
Y ahora puede usar la clase MyProvider donde sea necesario, por ejemplo, en el 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 )
. ...
}
} Únase a nuestra comunidad para obtener apoyo y discusiones:
Hoja de ruta
GPL-3.0
¡Cualquier pensamiento, los comentarios son bienvenidos! Cree un problema de GitHub para cualquier comentario que tenga.
¿Quieres apoyarnos?