uWebSockets.js提供动力
我们的消息传递协议和聊天服务器的意图与其他不同的目的是为广泛的传播XMPP消息传递协议提供替代解决方案(老实说,这是当今唯一广泛的“标准”)。
阅读介绍萨玛的完整中等文章,以及关于什么是sama以及我们试图解决什么问题的sama是什么:
Frontend App(Web + Mobile)可从https://github.com/sama-communications/sama-client获得
Node 18 。.env.example为.env 。docker-compose -f docker-compose.yml -f docker-compose.development.yml up运行依赖服务(mongodb,minio,redis)npm install以安装依赖关系npm run migrate-mongo-up运行DB迁移npm run start运行服务器(如果在Windows下运行的情况 - 请参见#128)ws://localhost:9001Sama Stack中还有其他组件 - 查看部署SAMA CHAT SERVER堆栈:综合指南
无论您想要具有所有依赖项的完整设置还是带有主要应用程序的本地环境,可以轻松地使用SAMA应用程序来完成SAMA应用程序。以下是要遵循的步骤:
这种方法在单个命令中构建并运行整个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;
如果您遇到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"
可以使用https://app.samacloud.io public Cloud对整个SAMA堆栈进行测试。
API参考
此外,每个API都有一组详细文章:
一个示例如何创建和使用提供商:
使用2个文件index.js and 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应导出一个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问题。
想支持我们吗?