synapse

synapse

Posted by qijun on May 12, 2022

前言

synapse是一款优秀的开源聊天框架,github地址https://github.com/matrix-org/synapse

centos服务器部署

我是参考博客

如果对外提供https服务,需要提供tls证书,参考

openssl genrsa -out privkey.pem 2048
openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095 

将两个pem文件上传,并按照官方文档 修改配置homeserver.yaml

#取消注释
  - port: 8448
    type: http
    tls: true
    resources:
      - names: [client, federation]

#配置证书
tls_certificate_path: "/root/synapse/ca.pem"
tls_private_key_path: "/root/synapse/privatekey.pem"

启动服务

source env/bin/activate
synctl start

网页客户端体验

客户端网址可能被墙
登录https://app.element.io/#/login
主界面默认matrix.org服务器,点击Edit,选择自己部署服务器的网址 https://118.195..:8448
然后注册登录

SDK

官网SDK汇总
.NET standard 2.0 library
官网API文档

sdk只提供基本功能,比如没有注册只有登录。缺省的功能就得去查API文档,然后自己调用http接口

例如注册,参考API文档Register Users
先Post http://118.195.212.43:8008/_matrix/client/v3/register

{
    "session": "FBiHORITNyEHaLvzfhOZqjzI",
    "flows": [
        {
            "stages": [
                "m.login.dummy"
            ]
        }
    ],
    "params": {}
}

得到session,再对同样的url请求并带上body,完成注册

Post http://118.195.212.43:8008/_matrix/client/v3/register
postman Body选择raw Json格式
{
"auth": {
"example_credential": "verypoorsharedsecret",
"session": "FBiHORITNyEHaLvzfhOZqjzI",
"type": "m.login.dummy"
},
"device_id": "GHTYAJCE",
"initial_device_display_name": "Jungle Phone",
"password": "operhero",
"username": "mima"
}

之后利用SDK进行登录及其他操作

var factory = new MatrixClientFactory();
IMatrixClient client = factory.Create();
client.LoginAsync(new Uri("http://118.195.212.43:8008"), "operhero", "mima", "BGQKOUZODN").Wait();
client.OnMatrixRoomEventsReceived += (sender, eventArgs) =>
{
    foreach (BaseRoomEvent roomEvent in eventArgs.MatrixRoomEvents)
    {
        if (roomEvent is not TextMessageEvent textMessageEvent)
            continue;

        (string roomId, string senderUserId, string message) = textMessageEvent;
        if (client.UserId != senderUserId)
            Console.WriteLine($"RoomId: {roomId} received message from {senderUserId}: {message}.");
    }
};
client.Start();

总结

synapse是基于长轮询,开房间的思想。私聊也是利用两个人开房间的思想实现。长轮询可以阅读syncing