uWebSockets.js 
Die Absicht unseres Messaging -Protokolls und Chat -Servers, die sich von anderen unterscheiden, besteht darin, eine alternative Lösung für das breite XMPP -Messaging -Protokoll zu liefern (und um ehrlich zu sein - den einzigen breiten "Standard" -Standard heutzutage).
Lesen Sie komplette mittlere Beiträge , um Sama und was Sama über das ist, was Sama ist und welche Probleme wir damit lösen möchten:
Frontend App (Web + Mobile) ist unter https://github.com/sama-communications/sama-client verfügbar
Node 18 installiert haben..env.example nach .env .docker-compose -f docker-compose.yml -f docker-compose.development.yml up zur Ausführung abhängiger Dienste (MongoDB, Minio, Redis)npm install , um Abhängigkeiten zu installierennpm run migrate-mongo-up um DB-Migrationen auszuführennpm run start den Server aus (um unter Windows auszuführen - siehe #128)ws://localhost:9001Es gibt auch andere Komponenten in Sama Stack - lesen Sie die Bereitstellung des SAMA -Chat -Server -Stacks: Eine umfassende Anleitung
Die Bereitstellung der SAMA -Anwendung kann einfach mit Docker durchgeführt werden, unabhängig davon, ob Sie ein vollständiges Setup mit allen Abhängigkeiten oder einer lokalen Umgebung mit den Hauptanwendungen wünschen. Im Folgenden finden Sie die folgenden Schritte:
Dieser Ansatz erstellt und führt die gesamte SAMA -Anwendung, einschließlich aller Abhängigkeiten, in einem einzigen Befehl aus. Es ist ideal, um die volle Umgebung schnell einzurichten.
Um diese Methode mithilfe dieser Methode bereitzustellen, führen Sie aus:
docker-compose -f docker-compose-full.yml up --build
Verwenden Sie die Abhängigkeitsdienste zusammen mit den Hauptanwendungen SAMA ( sama-client , sama-server und sama-push-daemon ), verwenden Sie:
docker-compose up --build
SAMA -Apps ausführen möchten, fügen Sie diese beiden Variablen vor dem Startbefehl hinzu:
Macos
MINIO_ENDPOINT=$(ipconfig getifaddr en0) MINIO_PORT=9010
Fenster
$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;
Wenn Sie Probleme mit Anhängen im Web -Client begegnen, schlägt dies vor, dass in der ersten Variablen ein Fehler aufgetreten ist. Um dies zu beheben, können Sie das Codesegment einfach mit der privaten IP -Adresse Ihres Computers aktualisieren.
Jetzt können Sie unter folgenden Adressen auf Apps zugreifen:
Migrationen laufen:
docker-compose exec sama-server sh -c "MONGODB_URL=mongodb://172.25.0.4/samatests npm run migrate-mongo-up"
Führen Sie E2E -Tests aus:
docker-compose exec sama-server sh -c "MONGODB_URL=mongodb://172.25.0.4/samatests npm run test"
Der gesamte Sama -Stack kann mit https://app.samacloud.io Public Cloud getestet werden.
API -Referenz
Außerdem gibt es für jede API eine Reihe detaillierter Artikel:
Ein Beispiel, wie der Anbieter erstellt und verwendet wird:
Ordner app/providers/services/my_provider erstellen mit 2 Dateien index.js und Provider.js erstellen
index.js sollte die Implementierung des Dienstes selbst enthalten:
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 sollte eine Instanz von RegisterProvider exportieren, die Anweisungen enthält, wie Sie eine Instanz der index.js -Klasse mit Abhängigkeiten erstellen: 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 } )app/providers/index.js den Export von Provider.js hinzu. import UserRepoProvider from "./repositories/user/Provider.js"
...
...
import MyProviderRegistration from "./services/my_provider/Provider.js"
const providers = [
UserRepoProvider ,
...
...
MyProviderRegistration
]
export default providers Für alle benutzerdefinierten APIS -Anbieter - Verwendung /APIs/[API_NAME]/providers/index.js Datei:
Und jetzt kann Yiou bei Bedarf MyProvider -Klasse verwenden, z. B. in Controller:
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 )
. ...
}
} Schließen Sie sich unserer Community an, um Unterstützung und Diskussionen zu erhalten:
Roadmap
GPL-3.0
Alle Gedanken, Feedback sind willkommen! Bitte erstellen Sie ein GitHub -Problem für jedes Feedback, das Sie haben.
Willst du uns unterstützen?