局域网聊天软件 matrix

news2024/11/13 8:58:17

窝有 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 许可发布.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

format()函数

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法介绍 format()可以对数据进行格式化处理操作&#xff0c;语法如下&#xff1a; format(value, format_spec) format_spec为格式化解释。当参数…

高性能Web服务器-Nginx的常用模块

文章目录 Nginx安装Nginx平滑升级与回滚平滑升级流程第1步&#xff0c;下载新版本第2步&#xff0c;编译第3步&#xff0c;执行make第4步&#xff0c;对比新旧版本第5步&#xff0c;备份旧nginx二进制文件第6步&#xff0c;模拟用户正在访问nginx第7步&#xff0c;替换旧的ngin…

The First Descendant第一后裔联机失败、联机报错这样处理

第一后裔/The First Descendant是一款免费的多人合作射击游戏&#xff0c;玩家将进入一片混乱的英格里斯大陆&#xff0c;扮演继承者后裔&#xff0c;通过各种主支线任务和故事剧情触发&#xff0c;最终揭开自身的秘密&#xff0c;并带领大家一起抵抗邪恶势力的入侵。为了避免玩…

Flume学习

Flume(分布式数据采集系统)学习 1.Flume架构 什么是flume&#xff1f; flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。 支持在日志系统中定制各类数据发送方&#xff0c;用于收集数据; 同时&#xff0c;Flume提供对数据进行简单处理&#xff0c;并写到…

华为昇腾310B1芯片DVPP模块VENC视频编码接口调用流程以及视频编码代码梳理

目录 1 接口调用流程 2 代码流程梳理 1 接口调用流程 在CANN 8.0.RC1 AscendCL应用软件开发指南 (C&C, 推理) 01.pdf 文档中有接口调用流程 2 代码流程梳理 代码在samples: CANN Samples - Gitee.com 然后我把这个代码完整的看了一遍&#xff0c;然后梳理了详细的代码…

web学习笔记(七十二)

目录 1.vue2通过$parent实现组件传值——父传子 2.vue2 通过$children实现组件传值——子传父 3. provide和inject传值&#xff08;依赖注入&#xff09; 4.vue2如何操作dom 5.vue2如何拿到最新的dom 6.filters过滤器 7.vue2的生命周期 8.vuex的用法 1.vue2通过$parent…

【SCI索引,Fellow主讲】2024年可持续发展与能源资源国际学术会议(SDER 2024,8月9-11)

2024年可持续发展与能源资源国际学术会议&#xff08;SDER 2024&#xff09;将在2024年8月9-11日于中国重庆召开。 大会旨在为从事可持续发展与能源资源方面的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术&#xff0c;了解学术发展趋势&#xff0c;拓…

2.4G特技翻斗车方案定制

遥控翻斗车不仅能够提供基本的前进、后退、左转和右转功能&#xff0c;还设计有多种特技动作和互动模式&#xff0c;以增加娱乐性和互动性。 1、无线遥控&#xff1a;玩具翻斗车一般通过2.4G无线遥控器进行控制&#xff0c;允许操作者在一定距离内远程操控车辆。 2、炫彩灯光…

Java程序员接单的十条“野路子”,分分钟收入20K!

Java程序员除了主业工作外&#xff0c;也要适当扩展兼职接单这条路。毕竟Java接单可以说是Java程序员进行技术变现的最佳方式之一。 因为Java程序员兼职接单的难度相对更低&#xff0c;单量也比较可观&#xff0c;最重要的是性价比也很顶&#xff0c;且听我一一道来&#xff1a…

Nature推荐的三种ChatGPT论文写作指令(含PDF下载)

1. 润色学术论文 ChatGPT学术润色指令&#xff1a; “I’m writing a paper on [topic]for a leading [discipline] academic journal. WhatItried to say in the following section is [specific point]. Please rephrase itfor clarity, coherence and conciseness, ensuri…

Charles抓包工具系列文章(五)-- DNS spoofing (DNS域名伪装)

一、背景 DNS域名是依赖DNS域名服务器&#xff0c;特别是内部域名&#xff0c;最后寻址到后端服务地址。 当我们无法修改客户端的域名&#xff0c;而想让其指向到我们期望地址时&#xff0c;可以采用charles的DNS spoofing。 何谓DNS 欺骗&#xff1a;将自己的主机名指定给远…

电商平台数据功能封装API需要注意些什么?如何调用封装后的API?

一、引言 随着电商行业的蓬勃发展&#xff0c;电商平台的数据功能愈发复杂多样&#xff0c;如何高效、安全地管理和使用这些数据成为了电商平台开发者面临的重要问题。API&#xff08;Application Programming Interface&#xff09;作为不同软件之间进行通信的桥梁&#xff0…

Win32消息机制原理及消息运转

一.消息机制原理 1.消息类型&#xff1a; WIndows定义的一系列WM_XXX开头的&#xff0c;用来表示键盘按键&#xff0c;鼠标点击&#xff0c;窗口变化&#xff0c;用户自定义等各种消息; 2.消息队列&#xff1a; Windows为每一个正在运行的程序维护一个消息队列应用程序的消…

Pycharm 文件标头设置

一、设置模板步骤&#xff1a; “文件File--设置Settings--编辑器Editor--File and Code Templates- Python Script” 里面设置模板 官方预设变量表 变量名 含义 ${DATE} 当前系统日期 ${DAY} 当前月的第几日 ${DAY_NAME_SHORT} 当前星期几的单词缩写&#xff08…

计算机网络之数据通信原理(下)

上一讲内容&#xff1a;数据传输方式、数据传输形式、传输差错处理、常用差错检测方法 数据通信过程中&#xff0c;一个很重要的问题就是如何控制数据的传输&#xff0c;就涉及到了传输控制规程&#xff08;协议&#xff09; 下面介绍两种&#xff1a; ①BSC&#xff1a;面向…

java基于ssm+jsp 弹幕视频网站

1前台首页功能模块 弹幕视频网站&#xff0c;在弹幕视频网站可以查看首页、视频信息、商品信息、论坛信息、我的、跳转到后台、购物车、客服等内容&#xff0c;如图1所示。 图1前台首页界面图 登录&#xff0c;通过登录填写账号、密码等信息进行登录操作&#xff0c;如图2所示…

高性能并行计算课程论文:并行网络爬虫的设计与实现

目录 1.绪论 1.1 研究背景 1.2 研究意义 ​​​​​​​1.3 文章结构 2. 网络爬虫相关理论 ​​​​​​​2.1 URL地址格式 ​​​​​​​2.2 网页爬取策略 2.2.1 深度优先策略 2.2.2 广度优先策略 2.2.3 最佳优先策略 ​​​​​​​2.3 网页分析算法 ​​​​​​​2.3.1 正…

three.js - matcap材质(MeshMatcapMaterial)

说一下matcap纹理 先总结&#xff1a;MeshMatcapMaterial材质&#xff0c;通过采样含有光照信息的贴图来模拟光照效果。这种材质特别适用于模拟静态光源下的光照&#xff0c;并且&#xff0c;因其简单性和快速性而被广泛应用于各种场景。但是&#xff0c;由于其性能考虑&#x…

Zynq7000系列FPGA中的DMA控制器——PL外设请求接口

图9-4中展示了PL外设请求接口主要由两部分组成&#xff1a;PL外设请求总线和DMAC确认总线。这两部分分别使用特定的前缀进行标识&#xff0c;具体如下&#xff1a; PL外设请求总线&#xff08;PL Peripheral Request Bus&#xff09;&#xff1a; 前缀&#xff1a;DR功能&…

13个行业数据分析指标体系如何建设100问

提供针对13个行业的数据分析指标体系的全面指南&#xff0c;涵盖各行业的关键指标和分析维度&#xff0c;帮助读者深入了解和构建有效的指标体系。以下是文章的主要内容&#xff1a; 电商行业数据指标体系&#xff1a;包括客户价值、商品、网站流量、整体运营、市场营销活动、市…