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-up , чтобы запустить миграции DBnpm run start запуска сервера (в случае работы под Windows - см. #128)ws://localhost:9001Существуют также другие компоненты, доступные в стеке SAMA - проверьте его развертывание стека SAMA Chat Server: комплексное руководство
Развертывание приложения 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 , добавьте эти две переменные перед командой запуска:
MacOS
MINIO_ENDPOINT=$(ipconfig getifaddr en0) MINIO_PORT=9010
Окна
$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;
Если вы сталкиваетесь с проблемами с вложениями в веб -клиенте, это предполагает, что ошибка произошла в первой переменной. Чтобы решить это, вы можете просто обновить сегмент кода с помощью частного 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 public Cloud.
Ссылка на API
Кроме того, существует набор подробных статей для каждого API:
Пример, как создать и использовать поставщика:
Создание папки app/providers/services/my_provider с 2 файлами index.js и Provider.js
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 должен экспортировать экземпляр RegisterProvider, который содержит инструкции, как создать экземпляр класса 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 Файл:
И теперь 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 для любых ваших отзывов.
Хотите поддержать нас?