uWebSockets.js 
L'intention de notre protocole de messagerie et de notre serveur de discussion, qui sont différents des autres, est de fournir une solution alternative au protocole de messagerie XMPP à large propagation (et pour être honnête - la seule «norme» à large propagation de nos jours).
Lisez les articles moyens complets en présentant Sama et ce qui est Sama sur ce qu'est Sama et quels problèmes nous essayons de résoudre avec lui:
Frontend App (Web + Mobile) est disponible sur https://github.com/sama-communications/sama-lient
Node 18 est installé..env.example à .env .docker-compose -f docker-compose.yml -f docker-compose.development.yml up exécuter des services dépendants (MongoDB, minio, redis)npm install pour installer des dépendancesnpm run migrate-mongo-up pour exécuter les migrations DBnpm run start Démarrer le serveur (dans un cas d'exécution sous Windows - voir # 128)ws://localhost:9001Il existe également d'autres composants disponibles dans SAMA STAKE - Vérifiez-le Déployer Sama Chat Server Stack: un guide complet
Le déploiement de l'application SAMA peut être effectué facilement avec Docker, que vous souhaitiez une configuration complète avec toutes les dépendances ou un environnement local avec les principales applications. Voici les étapes à suivre:
Cette approche construit et exécute l'ensemble de l'application SAMA, y compris toutes les dépendances, dans une seule commande. Il est idéal pour configurer rapidement l'environnement complet.
Pour déployer en utilisant cette méthode, exécutez:
docker-compose -f docker-compose-full.yml up --build
Pour exécuter les services de dépendance avec les principales applications SAMA ( sama-client , sama-server et sama-push-daemon ), utilisation:
docker-compose up --build
SAMA , ajoutez ces deux variables avant la commande de lancement:
Macos
MINIO_ENDPOINT=$(ipconfig getifaddr en0) MINIO_PORT=9010
Fenêtre
$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 vous rencontrez des problèmes avec les pièces jointes dans le client Web, cela suggère qu'une erreur s'est produite dans la première variable. Pour résoudre ce problème, vous pouvez simplement mettre à jour le segment de code avec l'adresse IP privée de votre machine.
Vous pouvez maintenant accéder aux applications aux adresses suivantes:
Exécuter des migrations:
docker-compose exec sama-server sh -c "MONGODB_URL=mongodb://172.25.0.4/samatests npm run migrate-mongo-up"
Exécutez les tests E2E:
docker-compose exec sama-server sh -c "MONGODB_URL=mongodb://172.25.0.4/samatests npm run test"
L'ensemble de la pile SAMA peut être testé en utilisant https://app.samacloud.io Cloud public.
Référence de l'API
De plus, il existe un ensemble d'articles détaillés pour chaque API:
Un exemple comment créer et utiliser le fournisseur:
Créer des dossiers app/providers/services/my_provider avec 2 fichiers index.js et Provider.js
index.js doit contenir la mise en œuvre du service lui-même:
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 doit exporter une instance de RegisterProvider qui contient des instructions comment créer une instance de la classe index.js avec les dépendances: 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 à 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 Pour tous les fournisseurs d'API personnalisés - Utilisez /APIs/[API_NAME]/providers/index.js api_name
Et maintenant, vous pouvez utiliser la classe MyProvider si nécessaire, par exemple dans le contrôleur:
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 )
. ...
}
} Rejoignez notre communauté pour un soutien et des discussions:
Feuille de route
GPL-3.0
Toute pensée, les commentaires sont les bienvenus! Veuillez créer un problème GitHub pour tous les commentaires que vous avez.
Vous voulez nous soutenir?