uWebSockets.jsを搭載しています
他のものとは異なるメッセージングプロトコルとチャットサーバーの意図は、XMPPメッセージングプロトコルの広い広範なソリューションを提供することです(正直に言うと、最近の唯一の広いスプレッド「標準」)。
サマを紹介する完全な中程度の投稿と、サマとは何か、そして私たちがそれで解決しようとしている問題についてサマとは何ですか:
FrontEndアプリ(Web + Mobile)は、https://github.com/sama-communications/sama-clientで入手できます
Node 18インストールされていることを確認してください。.env.example to .env 。docker-compose -f docker-compose.yml -f docker-compose.development.yml up実行する依存サービス(Mongodb、Minio、Redis)を実行するnpm install依存関係をインストールしますnpm run migrate-mongo-upnpm run start (Windowsの下で実行される場合 - #128を参照)ws://localhost:9001で着信接続をリッスンしますSAMAスタックには他のコンポーネントもあります - SAMAチャットサーバースタックを展開することをチェックしてください:包括的なガイド
SAMAアプリケーションを展開することは、すべての依存関係を備えた完全なセットアップや、メインアプリケーションを使用したローカル環境を使用する場合でも、Dockerで簡単に実行できます。以下は、従うべき手順です。
このアプローチは、単一のコマンドで、すべての依存関係を含むSAMAアプリケーション全体を構築および実行します。環境全体をすばやく設定するのに最適です。
この方法を使用して展開するには、実行してください。
docker-compose -f docker-compose-full.yml up --build
メインSAMAアプリケーション( sama-client 、 sama-server 、およびsama-push-daemon )とともに依存関係サービスを実行するには、以下を使用してください。
docker-compose up --build
SAMAアプリを実行したい場合は、起動コマンドの前にこれら2つの変数を追加します。
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;
Webクライアントの添付ファイルの問題に遭遇している場合、最初の変数でエラーが発生したことを示唆しています。これを解決するには、マシンのプライベートIPアドレスでコードセグメントを更新するだけです。
これで、次のアドレスでアプリにアクセスできます。
移行を実行する:
docker-compose exec sama-server sh -c "MONGODB_URL=mongodb://172.25.0.4/samatests npm run migrate-mongo-up"
E2Eテストの実行:
docker-compose exec sama-server sh -c "MONGODB_URL=mongodb://172.25.0.4/samatests npm run test"
SAMAスタック全体は、https://app.samacloud.ioパブリッククラウドを使用してテストできます。
APIリファレンス
また、各APIの詳細な記事のセットがあります。
プロバイダーの作成と使用方法の例:
2つのファイルindex.jsとProvider.jsを使用して、フォルダーapp/providers/services/my_providerを作成します
index.jsは、サービス自体の実装を含める必要があります。
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 、依存関係を持つindex.jsクラスのインスタンスを作成する方法を含む登録プロバイダーのインスタンスをエクスポートする必要があります。 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任意のカスタムAPIプロバイダーの場合 - /APIs/[API_NAME]/providers/index.js api_name ]/providers/index.jsファイル:
そして今、Yiouは、必要な場合にMyProviderクラスを使用できます。たとえば、コントローラーです。
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 )
. ...
}
} サポートとディスカッションのためにコミュニティに参加してください。
ロードマップ
GPL-3.0
どんな考えでも、フィードバックは大歓迎です!フィードバックについては、GitHubの問題を作成してください。
私たちをサポートしたいですか?