局域网聊天软件 matrix

窝有 3 只 Android 手机 (3 号手机, 6 号手机, 9 号手机), 2 台 ArchLinux PC (4 号 PC, 6 号 PC), 1 台 Fedora CoreOS 服务器 (5 号). (作为穷人, 窝使用的基本上是老旧的二手设备, 比如 5 年前的手机, 9 年前的笔记本, 10 年前的古老 e5v3 主机, 都比较便宜. )

窝经常需要 (想) 从一台设备发消息/文件等到另一台设备. 这个功能虽然使用 QQ / 微信等也能实现, 但是有很多问题:

  • (1) 需要注册很多账号. 比如一个 QQ 号只能同时在一只手机上登录, 有多只手机互相发消息, 就需要多个账号. 这很可能意味着需要有多个手机号, 很是麻烦, 花钱也多.

  • (2) 通信效率不高. 这些设备都在同一个局域网, 连接在同一个 wifi 路由器之下. 但是, 发消息却需要通过上述聊天软件在公网的服务器, 绕一圈回来. 直接在局域网内部, 走近路它不香嘛 ?

  • (3) 无法在断网时使用. 上述软件由于依赖公网的服务器, 如果宽带接入中断, 就无法使用了.

综上, 需要搭建一套在本地局域网使用的聊天软件.


相关文章: 《使用多用户增强服务器的安全性》 https://blog.csdn.net/secext2022/article/details/139961897

目录

  • 1 服务端的安装 (synapse)
  • 2 客户端软件
    • 2.1 手机客户端 (fluffychat)
    • 2.2 PC 客户端 (fractal)
    • 2.3 更多可选的客户端 (cinny, neochat, nheko, moment, element)
  • 3 聊天测试
    • 3.1 客户端登录
    • 3.2 创建群组 (聊天室)
    • 3.3 发送消息
  • 4 总结与展望

1 服务端的安装 (synapse)

matrix 是一个开源的通信协议, 也就是一种标准规范. matrix 使用 C/S (客户端/服务器) 架构, 也就是分为中心服务器和客户端. 其中服务器 (homeserver) 集中存储账号聊天数据, 客户端软件运行在 PC / 手机上, 用户使用客户端收发消息.

有多种具体的服务端软件可以选择, 此处采用的是比较成熟的一个, 功能比较完善.

参考资料: https://element-hq.github.io/synapse/latest/


  • (1) 制作容器镜像.

    相关文章: 《构建 deno/fresh 的 docker 镜像》 https://blog.csdn.net/secext2022/article/details/139649084

    使用类似的方法来制作镜像, 如下:

    > cat Dockerfile
    FROM quay.io/jitesoft/alpine:latest
    
    RUN sed -i 's/ftp.halifax.rwth-aachen.de/mirrors.sjtug.sjtu.edu.cn/g' /etc/apk/repositories
    RUN apk update && apk upgrade && apk add synapse curl icu-data-full && apk cache clean
    
    EXPOSE 8008/tcp 8009/tcp 8448/tcp
    
    ENTRYPOINT ["/usr/bin/synapse_homeserver"]
    
    HEALTHCHECK --start-period=5s --interval=15s --timeout=5s \
      CMD curl -fSs http://localhost:8008/health || exit 1
    
    #CMD ["/bin/ash"]
    

    构建命令:

    docker build -t synapse .
    

    制作的镜像:

    > docker images
    REPOSITORY                                TAG             IMAGE ID       CREATED              SIZE
    synapse                                   latest          e01a809a9821   About a minute ago   256MB
    quay.io/jitesoft/alpine                   latest          1bd690c0f25c   6 days ago           7.82MB
    

    导出镜像:

    > docker save synapse | zstd > synapse.tar.zst
    > ls -lh synapse.tar.zst
    -rw-r--r-- 1 s2 s2 78M  6月26日 16:34 synapse.tar.zst
    
  • (2) 服务端配置文件. (Fedora CoreOS 服务器详见文章 《使用多用户增强服务器的安全性》)

    相关配置文件如下 (仅供参考):

    #fc-test@MiWiFi-RA74-srv:~$ cat /mnt/data/d1/fc-test/srv/synapse/homeserver.yaml
    # Configuration file for Synapse.
    server_name: "synapse.fc-server.test"
    pid_file: /homeserver.pid
    listeners:
      - port: 8008
        tls: false
        type: http
        x_forwarded: true
        bind_addresses: ['::', '0.0.0.0']
        resources:
          - names: [client, federation]
            compress: false
    database:
      name: sqlite3
      args:
        database: /var/homeserver.db
    media_store_path: /var/media_store
    log_config: "/var/log_config.yaml"
    
    # 随机字符串
    registration_shared_secret: "随机秘密, 请修改此处"
    macaroon_secret_key: "随机秘密, 请修改此处"
    form_secret: "随机秘密, 请修改此处"
    
    report_stats: true
    signing_key_path: "/etc/synapse/my.domain.name.signing.key"
    trusted_key_servers:
      - server_name: "localhost"
    
    #fc-test@MiWiFi-RA74-srv:~$ cat /mnt/data/d1/fc-test/srv/synapse/log_config.yaml
    # Log configuration for Synapse.
    version: 1
    
    formatters:
        precise:
            format: '%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s'
    
    handlers:
        file:
            class: logging.handlers.TimedRotatingFileHandler
            formatter: precise
            filename: /var/homeserver.log
            when: midnight
            backupCount: 3
            encoding: utf8
    
        buffer:
            class: synapse.logging.handlers.PeriodicallyFlushingMemoryHandler
            target: file
    
            capacity: 10
            flushLevel: 30
            period: 5
    
        console:
            class: logging.StreamHandler
            formatter: precise
    
    loggers:
        synapse.storage.SQL:
            level: INFO
    
    root:
        level: INFO
        #level: DEBUG
    
        handlers: [buffer]
    
    disable_existing_loggers: false
    

    警告: 此处的配置并没有充分考虑服务器的安全性, 仅适用于在局域网内部使用 !! 免责声明: 请勿将服务器暴露在公网, 可能出现严重的安全问题, 后果自负 !

  • (3) 运行服务端容器.

    (3.1) 加载容器镜像:

    fc-test@MiWiFi-RA74-srv:~$ ls -lh
    total 155M
    -rw-r--r--. 1 fc-test fc-test 77M Jun 23 08:16 my-app.tar.zst
    -rw-r--r--. 1 fc-test fc-test 78M Jun 26 08:44 synapse.tar.zst
    fc-test@MiWiFi-RA74-srv:~$ podman load < synapse.tar.zst
    Getting image source signatures
    Copying blob 9aa2e4323f1d done   | 
    Copying blob feed612d9b64 done   | 
    Copying blob 299020072df1 done   | 
    Copying blob fc99c43dcd02 done   | 
    Copying config e01a809a98 done   | 
    Writing manifest to image destination
    Loaded image: docker.io/library/synapse:latest
    fc-test@MiWiFi-RA74-srv:~$ podman images
    REPOSITORY                                 TAG         IMAGE ID      CREATED         SIZE
    docker.io/library/synapse                  latest      e01a809a9821  13 minutes ago  266 MB
    registry.fedoraproject.org/fedora-toolbox  40          fe913ee7ac45  27 hours ago    2.19 GB
    docker.io/library/my-app                   latest      83173f90cca5  13 days ago     238 MB
    fc-test@MiWiFi-RA74-srv:~$ 
    

    (3.2) 配置文件:

    fc-test@MiWiFi-RA74-srv:~$ cat ~/.config/containers/systemd/synapse.container
    [Unit]
    Description=synapse server
    Wants=network-online.target
    After=network-online.target
    
    StartLimitIntervalSec=5s
    StartLimitBurst=1
    
    [Container]
    Image=synapse
    PublishPort=8008:8008
    Pull=never
    
    Exec= -c /var/homeserver.yaml
    Volume=/mnt/data/d1/fc-test/srv/synapse/:/var:z
    
    [Service]
    Restart=always
    
    [Install]
    WantedBy=default.target
    

    (3.3) 重新载入配置文件:

    fc-test@MiWiFi-RA74-srv:~$ systemctl --user daemon-reload
    fc-test@MiWiFi-RA74-srv:~$ systemctl --user status synapse
    ○ synapse.service - synapse server
        Loaded: loaded (/var/home/fc-test/.config/containers/systemd/synapse.container; generated)
        Drop-In: /usr/lib/systemd/user/service.d
                └─10-timeout-abort.conf
        Active: inactive (dead)
    fc-test@MiWiFi-RA74-srv:~$ 
    

    (3.4) 运行容器:

    fc-test@MiWiFi-RA74-srv:~$ systemctl --user start synapse
    
  • (4) 创建用户.

    (4.1) 查看运行的容器:

    fc-test@MiWiFi-RA74-srv:~$ podman ps
    CONTAINER ID  IMAGE                             COMMAND               CREATED        STATUS        PORTS                   NAMES
    bf7e6be170fa  docker.io/library/my-app:latest   /usr/bin/deno run...  7 hours ago    Up 7 hours    0.0.0.0:8000->8000/tcp  systemd-my-app
    17e3fb784136  docker.io/library/synapse:latest  -c /var/homeserve...  2 minutes ago  Up 2 minutes  0.0.0.0:8008->8008/tcp  systemd-synapse
    

    (4.2) 在容器中运行命令:

    fc-test@MiWiFi-RA74-srv:~$ podman exec -it systemd-synapse /bin/ash
    / # register_new_matrix_user -c /var/homeserver.yaml
    New user localpart [root]: p3
    Password: 
    Confirm password: 
    Make admin [no]: yes
    Sending registration request...
    Success!
    / # 
    

    使用 register_new_matrix_user 命令创建新用户, 输入用户名和密码.

2 客户端软件

支持 matrix 协议的客户端软件也有很多可供选择.

2.1 手机客户端 (fluffychat)

这个可能是最可爱的客户端软件, 支持 Android 手机, 可爱无敌 !!

网址: https://fluffychat.im/

2.2 PC 客户端 (fractal)

  • (1) fractal 是一个具有 GNOME 界面风格的 PC 客户端. 可以从 flathub 安装:

    flatpak install flathub org.gnome.Fractal
    

    https://flathub.org/apps/org.gnome.Fractal https://gitlab.gnome.org/World/fractal

  • (2) fluffychat 也有 PC 版, 但是目前体验稍微差一些.

    https://flathub.org/apps/im.fluffychat.Fluffychat https://fluffychat.im/

2.3 更多可选的客户端 (cinny, neochat, nheko, moment, element)

  • (1) cinny https://flathub.org/apps/in.cinny.Cinny https://cinny.in/

  • (2) neochat https://flathub.org/apps/org.kde.neochat https://apps.kde.org/de/neochat/

  • (3) nheko https://flathub.org/apps/im.nheko.Nheko

  • (4) moment https://flathub.org/apps/xyz.mx_moment.moment

  • (5) element https://element.io/download

  • (6) matrix-commander 这个是命令行界面的, 酷 ! https://github.com/8go/matrix-commander

  • 更多推荐列表: https://itsfoss.com/best-matrix-clients/

以上只是列举了一部分, 真的有很多的兼容软件可以选择 !

3 聊天测试

下面简单演示一下客户端软件的使用, 以 fluffychat 举栗.

3.1 客户端登录

首先需要登录账号. 打开 fluffychat 手机应用, 如图:

在这里插入图片描述

服务器地址输入 http://synapse.fc-server.test:8008 并确认. 其中 synapse.fc-server.test 为本地局域网服务器的 IP 地址. 如果地址输入错误, 就连不上服务器, 请仔细检查是否有微小的错误.

在这里插入图片描述

连接服务器成功, 点击 使用密码登录 按钮.

在这里插入图片描述

在这里插入图片描述

输入用户名/密码, 进行登录.

在这里插入图片描述

登录成功界面.

在这里插入图片描述

点击右上角头像, 然后点击 设置 菜单项, 可以进行简单的设置.

在这里插入图片描述

比如可以修改自己的名字.

在这里插入图片描述

3.2 创建群组 (聊天室)

在这里插入图片描述

进入创建群组界面.

在这里插入图片描述

输入名称和描述, 进行创建.

在这里插入图片描述

创建成功.

在这里插入图片描述

3.3 发送消息

重复上述步骤: 首先在服务器上, 为每个设备创建账号. 然后在每个设备上登录对应账号, 并加入群组.

然后画风就变成这样了:

在这里插入图片描述

这是在手机上使用 fluffychat 客户端.

在这里插入图片描述

这是在 PC 上使用 fractal 客户端.

众喵集齐, 喵呜 ~~

4 总结与展望

matrix 协议为 C/S 架构, 分为中心服务器和客户端. 服务端软件和客户端软件都有很多种可供选择, 本文使用其中 2 种进行举栗.

服务端软件以容器的方式运行, 需要自己制作容器镜像, 部署镜像并编写所需配置文件. 服务端启动之后, 可以创建新的账号.

客户端软件的安装就很简单了, 输入服务器地址, 以及用户名/密码进行登录. 登录之后可以创建/加入群组 (聊天室), 然后就可以愉快的发送消息啦 ~

通过局域网聊天软件, 几只手机和 PC 终于可以齐聚一堂, 共同玩耍了 !

synapse 服务端目前使用 sqlite 数据库, 但是这个数据库仅供测试, 读写性能很差. 后续应该升级成使用 postgresql 数据库.


本文使用 CC-BY-SA 4.0 许可发布.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/749762.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Git】安装与常用命令

一、Git环境配置 二、获取本地仓库 三、基础操作指令 四、分支 Git Bash 使用到基本 Linux 命令 在使用 Git 进行版本控制时&#xff0c;经常需要在 Git Bash 或其他终端中使用一些基本的 Linux 命令。以下是常见的 Git 命令和基本的 Linux 命令示例。 基本 Linux 命令 ls/ll…

无线麦克风推荐哪些品牌,一文揭秘无线麦克风领夹哪个牌子好!

​究竟该如何选择麦克风呢&#xff1f;又该如何挑选无线麦克呢&#xff1f;询问我关于麦克风选择问题的人着实不少。对于那些仅仅是想要简单地自我娱乐的朋友而言&#xff0c;着实没必要去折腾&#xff0c;直接使用手机自带的麦克风便可以了。 但若是处于想要直播、拍摄短视频…

FPGA PCIe加载提速方案

目录 1.bit流压缩 2.flash加载速度 3.Tandem模式 1.bit流压缩 set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design] 2.flash加载速度 打开bitstream setting&#xff0c;设置SPI的线宽和速率&#xff08;线宽按原理图设置&#xff0c;速率尽可能高&#xff09…

async异步函数

文章目录 异步函数&#xff08;用 async 声明的函数&#xff09;异步函数的返回值async/await 的使用异步函数的异常处理总结 感谢铁子阅读&#xff0c;觉得有帮助的话点点关注点点赞&#xff0c;谢谢&#xff01; 异步函数&#xff08;用 async 声明的函数&#xff09; 异步函…

电阻代码的谐音助记口诀

整理电子信息的课设&#xff0c;发现当时的笔记&#xff0c;记录一下&#xff0c;时间过得真快啊。 01234黑棕红橙黄 56789绿蓝紫灰白 银色和金色代表误差&#xff0c; 银色百分之十 金色百分之五 可以这么理解&#xff0c;运动会奖牌&#xff0c;金牌比银牌等级高&#xff…

Django(根据Models中模型类反向生成数据库表)—— python篇

一、数据库的配置 1、 django默认支持 sqlite&#xff0c;mysql, oracle,postgresql数据库。 sqlite&#xff1a;django默认使用sqlite的数据库&#xff0c;默认自带sqlite的数据库驱动 , 引擎名称&#xff1a;django.db.backends.sqlite3 mysql&#xff1a;引擎名称&#xff…

python实训day5

1、 from ming import getconn conn getconn("gaoming") print() sql [("select * from dept", ()),#"dept"的表中选择所有列("delete from person where sid<%s", (4,)),#删除"person"表中"sid"列小于4的记…

【JavaScript】JS对象和JSON

目录 一、创建JS对象 方式一&#xff1a;new Object() 方式二&#xff1a;{属性名:属性值,...,..., 方法名:function(){ } } 二、JSON格式 JSON格式语法&#xff1a; JSON与Java对象互转: 三、JS常见对象 3.1数组对象API 3.2 其它对象API 一、创建JS对象 方式一&#xff1a;new…

君諾外匯:为什么巴菲特现在加倍下注油气股票?油价上涨是主因吗?

近年来&#xff0c;以巴菲特为代表的一些顶级投资者开始在能源领域加大投资力度&#xff0c;特别是油气股票。这一转变引发了广泛关注&#xff0c;特别是在油价上涨的背景下。本文将Juno markets外匯深入分析巴菲特投资策略的变化原因&#xff0c;探讨其在能源市场的布局及未来…

如何用Vue3和Plotly.js实现一个动态3D图的在线展示

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 基于 Plotly.js 的交互式图表动画 应用场景 本代码演示了如何使用 Plotly.js 创建交互式图表动画&#xff0c;其中一个区域填充的区域在给定时间间隔内更新其数据。这种动画可用于可视化时间序列数据或展示数…

冷门赛道,视频号励志语录赛道详解,新手轻松上手

大家好&#xff0c;我是闷声轻创&#xff0c;在当今数字化时代&#xff0c;社交媒体已成为人们获取信息、分享生活和实现个人价值的重要渠道。视频号&#xff0c;作为新兴的短视频平台&#xff0c;以其独特的优势和巨大的流量潜力&#xff0c;吸引了众多创作者的目光。今天我将…

华为畅享系列多款产品升级HramonyOS 4.2版本,一篇带你解读

最近华为畅享系列多款手机陆续迎来了HarmonyOS 4.2新版本&#xff0c;华为畅享70S、华为畅享70 Pro、华为畅享60X、华为畅享60 Pro和华为畅享50 Pro都在升级计划中。这次升级的4.2版本不仅功能强大&#xff0c;重点是好玩又实用&#xff0c;速来围观&#xff01; 那本次升级版本…

基于JSP的水果销售管理网站

开头语&#xff1a;你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;B/S架构 系统展示 首页 管理员功能模块 用户前…

使用原子子表创建可重用的子组件

原子子表是一个图形对象&#xff0c;可帮助您在Stateflow图表中创建独立的子部件。原子子表允许&#xff1a; 对具有多个状态或层次结构的图表进行微小更改后&#xff0c;模拟速度更快。 在多个图表和模型中重复使用相同的状态或子表。 易于团队开发&#xff0c;适用于在同一图…

聊一聊UDF/UDTF/UDAF是什么,开发要点及如何使用?

背景介绍 UDF来源于Hive&#xff0c;Hive可以允许用户编写自己定义的函数UDF&#xff0c;然后在查询中进行使用。星环Inceptor中的UDF开发规范与Hive相同&#xff0c;目前有3种UDF&#xff1a; A. UDF--以单个数据行为参数&#xff0c;输出单个数据行&#xff1b; UDF&#…

GMSB文章六:微生物SCFA关联分析

欢迎大家关注全网生信学习者系列&#xff1a; WX公zhong号&#xff1a;生信学习者Xiao hong书&#xff1a;生信学习者知hu&#xff1a;生信学习者CDSN&#xff1a;生信学习者2 介绍 微生物短链脂肪酸&#xff08;SCFAs&#xff09;是由肠道微生物发酵膳食纤维、抗性淀粉、低…

@城规人快来抄作业!转GIS开发月薪12000+

从性价比极低的时薪&#xff0c;到相对稳定的月薪过万&#xff0c;我做对了哪些事情&#xff1f; 今天分享的是城乡规划专业的L拿到GIS开发高薪offer的故事。 初识新中地 该同学是城乡规划专业本科&#xff0c;下面称他为L同学。 L同学是今年夏天在网络上了解了GIS开发和新…

Kafka入门到精通(四)-SpringBoot+Kafka

一丶IDEA创建一个空项目 二丶添加相关依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springf…

MySQL改密

这里写目录标题 更改登录密码&#xff1a;有权限账号能登录mysql中&#xff1a;有权限账号不能登录mysql中&#xff1a;mysql5.6版本命令mysql5.7版本命令修改密码8.0版本改完后&#xff1a; mysql登录不上了本机安装了5.6后&#xff0c;又安装了mysql8.0 更改登录密码&#xf…

双麒麟系统!RK3588+银河麒麟/开放麒麟,全国产让您的产品更具竞争力

01 银河麒麟嵌入式系统介绍 银河麒麟嵌入式操作系统V10 SP1是为物联网及工业互联网场景设计的安全实时系统&#xff0c;基于Linux内核&#xff0c;采用“分域虚拟化 多域隔离”架构&#xff0c;结合了Linux的丰富生态和RTOS的硬实时能力。 该系统支持主流嵌入式芯片&#x…