标签: 软件

  • 【油猴脚本】将网页中的IPFS链接自动转到本地的IPFS节点,以便加速加载

    // ==UserScript==
    // @name         ipfs link redirctor
    // @namespace    http://tampermonkey.net/
    // @version      0.2
    // @description  Replaces ipfs links with user configured host
    // @author       TheDailySpank
    // @match        *://*/ipfs/*
    // @match        *://*/ipns/*
    // @match        *://*/*
    // @grant        none
    // @run-at       document-end
    // ==/UserScript==
    
    (function() {
        'use strict';
    
        var ipfsHost = "http://127.0.0.1:8080"   // default settings if running ipfs daemon on local machine
    
        // ipfs.io gateway
        // var ipfsHost = "https://ipfs.io"
    
        // Cloudflare gateway
        // var ipfsHost = "https://cloudflare-ipfs.com"
    
        var anchors = document.querySelectorAll('a');
    
        for (var i = 0; i < anchors.length; i++) {
            var regex = /.*(\/ipfs\/Qm\w.*)/g;
            anchors[i].href = anchors[i].href.replace(regex, ipfsHost + '$1');
        }
    
        var imgs = document.querySelectorAll('img');
    
        for (var i = 0; i < imgs.length; i++) {
            var regex = /.*(\/ipfs\/Qm\w.*)/g;
            imgs[i].src = imgs[i].src.replace(regex, ipfsHost + '$1');
        }
    
    })();// ==UserScript==
    // @name        New script kkgithub.com
    // @namespace   Violentmonkey Scripts
    // @match       https://raw.kkgithub.com/TheDailySpank/ipfs-redirector/master/ipfs-redirector.js*
    // @grant       none
    // @version     1.0
    // @author      -
    // @description 2024/6/7 13:07:26
    // ==/UserScript==
    

    本站图片大部分放在IPFS,如果直接加载困难,可以在本地部署IPFS节点后安装上面的油猴脚本,即可实现本地IPFS节点快速加载资源。

  • 使用 pm2 管理 Node.js 进程并配置定时重启

    pm2 是一个强大的 Node.js 进程管理器,可以帮助你轻松管理 Node.js 应用,包括启动、停止、重启、监控等。下面介绍如何使用 pm2 管理 Node.js 进程并配置定时重启:

    1. 安装 pm2

    npm install -g pm2

    2. 启动 Node.js 应用

    使用 pm2 start 命令启动你的 Node.js 应用,例如:

    pm2 start app.js

    3. 配置定时重启

    使用 pm2 restart 命令配置定时重启,例如:

    pm2 restart app.js --cron "*/30 * * * *"

    解释:

    • pm2 restart app.js:重启名为 app.js 的进程。
    • --cron "*/30 * * * *":使用 cron 表达式配置重启时间。

    cron 表达式:

    • */30:每 30 分钟执行一次。
    • *:表示所有时间单位都匹配。

    4. 查看 pm2 进程状态

    使用 pm2 list 命令查看所有 pm2 管理的进程状态。

    5. 停止 pm2 进程

    使用 pm2 stop 命令停止 pm2 管理的进程,例如:

    pm2 stop app.js

    6. 删除 pm2 进程

    使用 pm2 delete 命令删除 pm2 管理的进程,例如:

    pm2 delete app.js

    7. 其他 pm2 命令

    pm2 提供了丰富的命令来管理 Node.js 进程,例如:

    • pm2 logs: 查看进程日志。
    • pm2 monit: 监控进程状态。
    • pm2 reload: 重新加载进程配置。
    • pm2 restart: 重启进程。
    • pm2 stop: 停止进程。
    • pm2 delete: 删除进程。

    注意:

    • 定时重启可能会导致应用短暂中断服务,请根据实际情况选择合适的重启时间。
    • 使用 pm2 ecosystem.config.js 文件可以更方便地管理多个进程和配置。

    示例:

    // ecosystem.config.js
    module.exports = {
      apps: [
        {
          name: 'my-app',
          script: 'app.js',
          watch: ['src'],
          env: {
            NODE_ENV: 'development'
          },
          env_production: {
            NODE_ENV: 'production'
          },
          restart_delay: 1000,
          cron_restart: '*/30 * * * *'
        }
      ]
    };

    使用 pm2 start ecosystem.config.js 命令启动应用,并根据配置进行定时重启。


  • 配置 crontab 定时重启 Node.js 进程

    您可以使用以下方法配置 crontab 定时重启 Node.js 进程:

    1. 编写重启脚本

    首先,您需要编写一个脚本,用于重启 Node.js 进程。以下是一个示例脚本:

    #!/bin/bash
    
    # 进程名称
    PROCESS_NAME="your_process_name"
    
    # 查找进程并重启
    for i in $(seq 1 10); do
      PID=$(pgrep -f "$PROCESS_NAME$i")
      if [ $? -eq 0 ]; then
        echo "Restarting process $PROCESS_NAME$i with PID $PID..."
        kill -9 $PID
        # 重新启动进程
        # 使用您实际的启动命令替换以下命令
        nohup node your_app.js $i &
        echo "Process $PROCESS_NAME$i restarted."
      else
        echo "Process $PROCESS_NAME$i not found."
      fi
      sleep 1800 # 等待 30 分钟
    done

    解释:

    • #!/bin/bash: 指定脚本解释器为 bash。
    • PROCESS_NAME: 替换为您的 Node.js 进程名称。
    • pgrep -f "$PROCESS_NAME$i": 查找名为 PROCESS_NAME$i 的进程,并获取其 PID。
    • kill -9 $PID: 强制杀死进程。
    • nohup node your_app.js $i &: 重新启动 Node.js 进程,使用您的实际启动命令替换 node your_app.js $i
    • sleep 1800: 等待 30 分钟,然后重启下一个进程。

    2. 配置 crontab

    将脚本保存为 restart_process.sh 并赋予执行权限:

    chmod +x restart_process.sh

    然后使用 crontab -e 命令编辑 crontab 文件,添加以下内容:

    0,30 * * * * /path/to/restart_process.sh

    解释:

    • 0,30 * * * *: 表示每小时的 0 分和 30 分执行一次。
    • /path/to/restart_process.sh: 替换为 restart_process.sh 脚本的路径。

    3. 测试

    保存 crontab 文件并测试脚本是否正常工作。您可以使用 crontab -l 命令查看 crontab 文件内容,并使用 tail -f /var/log/cron 命令查看 cron 日志。

    注意:

    • 确保 restart_process.sh 脚本中的启动命令正确,并根据您的实际情况进行修改。
    • 您可以根据需要调整脚本中的 sleep 时间,以控制重启间隔。
    • 为了确保重启进程的正常运行,建议您在脚本中添加日志记录功能,方便排查问题。

    希望以上信息对您有所帮助。

  • 【ffmpeg】libfdk_aac 优化编译参数支持 AVX512

    为了让 ffmpeg 编译时支持 AVX512 并优化 libfdk_aac 的性能,你需要修改编译配置参数。以下步骤将指导你完成操作:

    1. 确认你的 CPU 支持 AVX512

    首先,你需要确认你的 CPU 是否支持 AVX512 指令集。可以使用以下命令检查:

    grep -q avx512 /proc/cpuinfo && echo "AVX512 supported" || echo "AVX512 not supported"

    如果输出 “AVX512 supported”,则你的 CPU 支持 AVX512。

    2. 修改 ffmpeg 编译配置

    在编译 ffmpeg 时,需要添加以下参数:

    ./configure --enable-libfdk-aac --enable-neon --enable-avx2 --enable-avx512 --enable-runtime-cpudetect
    • --enable-libfdk-aac: 启用 libfdk_aac 库。
    • --enable-neon: 启用 ARM NEON 指令集 (可选,如果你的 CPU 支持)。
    • --enable-avx2: 启用 AVX2 指令集。
    • --enable-avx512: 启用 AVX512 指令集。
    • --enable-runtime-cpudetect: 启用运行时 CPU 检测,允许 ffmpeg 在运行时选择最佳指令集。

    3. 编译 ffmpeg

    完成配置后,使用以下命令编译 ffmpeg:

    make -j$(nproc)

    4. 测试

    编译完成后,你可以使用以下命令测试 ffmpeg 是否支持 AVX512:

    ffmpeg -version | grep avx512

    如果输出包含 “avx512″,则表示 ffmpeg 已经成功支持 AVX512 指令集。

    注意:

    • 启用 AVX512 指令集可能会导致某些旧硬件出现兼容性问题。
    • 编译 ffmpeg 需要一定的系统资源,建议使用较快的 CPU 和充足的内存。

    其他优化参数:

    除了上述参数,你还可以尝试以下其他参数进一步优化 ffmpeg 的性能:

    • --enable-libx264: 启用 x264 编解码器。
    • --enable-libx265: 启用 x265 编解码器。
    • --enable-libvpx: 启用 libvpx 编解码器。
    • --enable-libopenh264: 启用 OpenH264 编解码器。

    总结:

    通过修改编译配置参数,你可以让 ffmpeg 支持 AVX512 指令集,并优化 libfdk_aac 的性能。在编译时,请根据你的 CPU 和系统资源选择合适的参数。

  • 如何增强互联网的记忆力?

    IPFS(InterPlanetary File System)是一个点对点的媒体传输协议,旨在建立一个持久的、分布式的文件系统。它通过内容寻址的方式来定位和获取文件,使得文件在网络中具有高可用性的特性[2]。而dreamlink.cloud是一个基于IPFS的静态网站,提供了一系列在去中心化P2P网络上运行的工具[1]

    以下是对IPFS和dreamlink.cloud的介绍:

    IPFS的特点:

    • 去中心化:IPFS没有特权节点,所有节点都是平等的,任何用户都可以存储和分享文件内容[2]
    • 内容寻址:IPFS使用内容的哈希值作为文件的唯一标识,通过请求哈希值来获取文件内容,而不是通过地址寻址[2]
    • 高可用性:IPFS中的文件可以被存储在成千上万的节点中,即使某个节点宕机或下线,其他节点仍然可以获取到文件内容[2]
    • 安全性:IPFS使用哈希值来校验文件内容的完整性,如果文件在传输过程中被篡改,哈希值将与请求的哈希值不一致,从而保证了数据的安全性[2]

    dreamlink.cloud的特点:

    • 无需安装IPFS节点:dreamlink.cloud提供了一个在Web浏览器中运行的IPFS节点,用户无需自行安装节点即可使用IPFS功能[1]
    • 无限制的文件分享:用户可以上传文件和文件夹,没有账户、大小或带宽限制,实现自己的文件提供者角色[1]
    • 分布式搜索:通过ipfs-search.com进行文件和文件夹的搜索[1]
    • 文本粘贴板:用户可以创建和分享任何文本格式的内容[1]
    • 加密P2P聊天室:用户可以创建加密的P2P聊天室,与信任的人进行自由通信[1]

    IPFS和dreamlink.cloud的优势:

    • 高可用性和抗审查:IPFS的去中心化特性使得文件具有高可用性和抗审查的能力,而dreamlink.cloud作为基于IPFS的静态网站,进一步增强了这些特性[2]
    • 无需中心化服务器:与传统的互联网不同,IPFS和dreamlink.cloud不依赖于中心化的服务器托管商,任何人都可以注册一个节点,成为一个高效的文件提供者[2]

    IPFS是一个点对点的媒体传输协议,通过内容寻址的方式实现高可用性的分布式文件系统。而dreamlink.cloud则是一个基于IPFS的静态网站,提供了无需安装IPFS节点的文件分享、搜索、文本粘贴板和加密P2P聊天室等功能。


    Learn more:

    1. GitHub – opendreamnet/dreamlink.cloud: Static website with tools running entirely on IPFS.
    2. IPFS 介绍 | Verne in GitHub
    3. What Is the Interplanetary File System (IPFS) and How Do You Use It?
  • 深入理解 PHP-FPM:全面指南

    引言

    PHP 作为 Web 开发中最流行的服务端脚本语言,在网站和 Web 应用日益复杂和需求量不断增长的今天,开发者们一直在寻求优化 PHP 性能和效率的方法。PHP-FPM (FastCGI 进程管理器) 作为一种高效的 PHP FastCGI 实现方案应运而生。本文将深入探讨 PHP-FPM 的世界,了解其功能、优势以及如何显著提升基于 PHP 应用的性能。

    1. 什么是 PHP-FPM?

    PHP-FPM 是一种替代性的 PHP FastCGI 实现,旨在克服传统 PHP-CGI (通用网关接口) 的局限性。它作为进程管理器,独立于 Web 服务器管理 PHP 进程并处理 PHP 请求。通过这种方式,它可以高效地并发处理多个 PHP 请求,从而显著减少延迟并提高整体性能。

    2. PHP-FPM 的优势

    2.1 提升性能

    PHP-FPM 的主要目标是提高基于 PHP 应用的性能。通过维护独立的 PHP 工作进程,它可以更高效地处理大量并发请求。这种方法显著减少了响应时间,使 Web 应用更加灵敏,提升用户体验。

    2.2 资源效率

    PHP-FPM 可以更有效地管理资源。由于它作为进程管理器运行,因此可以根据服务器资源和传入请求负载控制活动 PHP 进程的数量。这可以防止资源浪费并优化服务器性能,从而使用更少的资源服务更多用户。

    2.3 稳定性和隔离性

    PHP-FPM 为运行 PHP 应用提供了一个稳定、安全的环境。如果一个 PHP 进程遇到错误或变得无响应,它不会影响其他活动进程。这种隔离性确保了单个请求的隔离,不会影响整体系统稳定性。

    2.4 可定制的池配置

    开发者可以微调 PHP-FPM 的池配置,以满足其应用的特定需求。配置参数包括子进程数量、每个子进程可以处理的最大请求数以及其他设置,可以根据不同的场景进行调整,以获得最佳性能。

    3. PHP-FPM 工作原理

    PHP-FPM 与 Web 服务器(例如 Nginx 或 Apache)协同工作。当收到 PHP 请求时,Web 服务器将其转发给 PHP-FPM 进程管理器,然后 PHP-FPM 通过子进程池处理该请求。这些子进程是 PHP 的独立实例,每个实例都能够独立处理单个请求。

    4. 配置 PHP-FPM

    配置 PHP-FPM 会显著影响 Web 应用的性能。根据服务器硬件和预期流量优化设置至关重要。常见的配置参数包括:

    4.1. pm_max_children

    此设置确定允许同时运行的最大子进程数。设置适当的值可确保有效利用资源,而不会导致内存问题。

    4.2. pm_max_requests

    pm_max_requests 参数控制每个子进程在回收之前可以处理的请求数。定期回收进程有助于缓解长时间运行的 PHP 应用中的内存泄漏。

    4.3. pm_process_idle_timeout

    此设置指定子进程在终止之前可以保持空闲状态的时间。当资源未积极服务请求时,它有助于释放资源。

    5. PHP-FPM 与虚拟主机

    在单个服务器上托管多个网站或 Web 应用时,虚拟主机是一种常见做法。PHP-FPM 在虚拟主机环境中起着至关重要的作用,因为它允许不同的网站运行独立的 PHP-FPM 池,确保站点之间的隔离和安全性。

    6. 结论

    毫无疑问,PHP-FPM 是基于 PHP 的 Web 开发领域的游戏规则改变者。它能够高效地管理 PHP 进程,加上其资源优化、稳定性和定制选项,使其成为希望提高 Web 应用性能的开发人员的首选。通过选择 PHP-FPM,开发人员可以为用户提供更快、响应更迅速的 Web 体验。

    常见问题解答 (FAQ)

    1. PHP-FPM 是否兼容 Nginx 和 Apache Web 服务器?

    是的,PHP-FPM 兼容 Nginx 和 Apache Web 服务器。它可以与这些服务器无缝集成,以提高 PHP 的性能。

    2. PHP-FPM 是否适用于 PHP 7 以外的 PHP 版本?

    是的,PHP-FPM 兼容 PHP 5.3 及更高版本。但是,建议使用最新的稳定 PHP 8版本以获得更好的性能和安全性。

    3. PHP-FPM 是否可以在共享主机环境中使用?

    是的,PHP-FPM 可以在共享主机环境中使用,在共享主机环境中,多个用户共享相同的服务器资源。它可以改进资源管理并提高 PHP 应用的整体性能。

    4. PHP-FPM 和 PHP-CGI 之间的主要区别是什么?

    主要区别在于它们处理 PHP 请求的方式。PHP-FPM 作为进程管理器运行,而 PHP-CGI 独立执行每个 PHP 请求。PHP-FPM 中的这种进程管理方法提供了更好的性能和资源利用率。

    5. 如何检查我的服务器上是否正在运行 PHP-FPM?

    要检查您的服务器上是否正在运行 PHP-FPM,可以使用以下命令:ps aux | grep php-fpm。如果已正确安装并运行,这将显示正在运行的 PHP-FPM 进程。

  • 【Excel】把金额的阿拉伯数字转换成中文大写

    在Excel中,你可以使用以下方法将金额的阿拉伯数字转换成中文大写:

    方法一:使用内置格式

    1. 将阿拉伯数字输入到一个单元格中。
    2. 选中该单元格,右键点击并选择”设置单元格格式”,或者使用快捷键CTRL+1来打开”设置单元格格式”对话框。
    3. 在”设置单元格格式”对话框中,选择”数字”选项卡。
    4. 在”分类”列表中选择”中文大写数字”。
    5. 确认并关闭对话框,你会发现该单元格中的阿拉伯数字已经被转换成了中文大写数字[2]

    方法二:使用公式

    1. 在一个单元格中输入以下公式:
       =IF(MOD(A1,1)=0,TEXT(INT(A1),"[DBNUM2]")&"元整",TEXT(INT(A1),"[DBNUM2]")&"元"&TEXT(MID(A1,LEN(INT(A1))+2,1),"[DBNUM2]D角")&TEXT(MID(A1,LEN(INT(A1))+3,1),"[DBNUM2]D分"))

    其中,A1是包含阿拉伯数字的单元格,你可以根据实际情况进行调整。

    1. 按下Enter键,该单元格将显示转换后的中文大写金额[2]

    方法三:使用VBA宏
    如果你需要在多个单元格中进行批量转换,你可以使用VBA宏来实现。以下是一个示例的VBA代码:

    Sub ConvertToChinese()
        Dim rng As Range
        Dim cell As Range
    
        Set rng = Selection ' 选择要转换的单元格范围
    
        For Each cell In rng
            cell.Value = Application.WorksheetFunction.Text(cell.Value, "[DBNUM2]")
        Next cell
    End Sub
    1. 打开Excel,按下ALT+F11打开VBA编辑器。
    2. 在VBA编辑器中,插入一个新的模块。
    3. 将上述VBA代码复制粘贴到新的模块中。
    4. 关闭VBA编辑器。
    5. 选中要转换的单元格范围。
    6. 按下ALT+F8打开宏对话框。
    7. 选择”ConvertToChinese”宏,并点击”运行”按钮。
    8. 选中的单元格将被转换成中文大写金额[2]

    请注意,以上方法适用于Excel的大多数版本。如果你使用的是其他版本或者有特定的需求,请参考相关文档或搜索更多资源。

    参考文献:
    [1] Excel表格中数字转中文大写怎么做?这里总有需要的那一种方法 – 腾讯云开发者社区-腾讯云
    [2] 百度知道 – 信息提示


    Learn more:

    1. 百度知道 – 信息提示
    2. Excel表格中数字转中文大写怎么做?这里总有需要的那一种方法 – 腾讯云开发者社区-腾讯云
    3. 百度知道 – 信息提示
  • 调整 PHP-FPM 以获得超高的服务器性能

    这篇文章提供了一个关于如何通过调整 PHP-FPM 设置来优化服务器内存使用并提高性能的逐步指南。

    步骤 1:确定 PHP-FPM 进程的内存使用情况

    • 运行以下命令以显示按 RSS(常驻集大小,即进程实际使用的物理内存量)排序的 php-fpm 进程:
       ps -ylC php-fpm7.3 --sort:rss 
    • 注意每个 php-fpm 进程使用的内存量(以 KB 或 GB 为单位)。

    步骤 2:估算其他进程的内存消耗

    • 运行 top 命令。
    • 按三次 < 键以按 RES(常驻内存大小)排序。
    • 确定 MySQL 和 Apache 等其他进程使用的内存量。

    步骤 3:为 PHP-FPM 分配内存

    • 根据服务器上的可用内存和步骤 1 和 2 中确定的内存使用情况,为 PHP-FPM 分配一定数量的内存。
    • 例如,如果您可以为 PHP-FPM 分配 2GB 内存,并且每个进程使用 0.15GB,则可以运行大约 13 个子进程 (2 / 0.15 = 13.33)。

    步骤 4:配置 PHP-FPM

    • 打开 PHP-FPM 配置文件:
       sudo nano /etc/php/7.x/fpm/pool.d/www.conf
    • 找到以下设置并根据您的计算结果进行调整:
      • pm = dynamic:将此设置为 dynamic 以允许 PHP-FPM 根据需要动态调整子进程的数量。
      • pm.max_children = 12:设置 PHP-FPM 可以创建的最大子进程数。
      • pm.min_spare_servers = 2:设置空闲状态下保持的最小服务器进程数。
      • pm.max_spare_servers = 4:设置空闲状态下保持的最大服务器进程数。
      • pm.start_servers = 12:设置 PHP-FPM 启动时启动的服务器进程数。
      • pm.max_requests = 500:设置每个子进程在重启之前可以处理的最大请求数,以防止内存泄漏。

    步骤 5:保存并重新启动 PHP-FPM

    • 保存配置文件。
    • 重新启动 PHP-FPM 以使更改生效:
       sudo service php7.3-fpm restart

    步骤 6:监控内存使用情况

    • 在进行更改后,请持续监控服务器的内存使用情况,以确保 PHP-FPM 性能最佳,并且不会导致内存不足的问题。

    在 PHP 8 中,您无法完全关闭垃圾回收(GC)机制。

    PHP 的垃圾回收器是其内存管理的核心部分,对于确保脚本运行时的稳定性和防止内存泄漏至关重要。

    尽管您无法禁用 GC,但您可以通过以下方式影响其行为:

    • gc_disable() 函数: 这个函数可以暂时禁用垃圾回收器的运行。 然而,这并不会阻止 PHP 引擎跟踪引用计数。 一旦 gc_enable() 被调用或者脚本结束,垃圾回收器会重新启动并清理不再需要的变量。
    • 修改 php.ini 配置文件: 您可以调整 zend.enable_gc=Off 来禁用循环引用收集器。 将其设置为 Off 会阻止 PHP 引擎检测和清理循环引用,但这可能会导致潜在的内存泄漏,尤其是在处理大量对象和复杂数据结构时。

    重要提示:

    • 强烈建议不要尝试完全禁用 PHP 的垃圾回收机制。 这样做可能会导致不可预测的行为,包括内存泄漏、性能下降,甚至导致 PHP 进程崩溃。
    • 如果您在脚本运行期间遇到与 GC 相关的性能问题,请先尝试优化代码以减少对象创建和循环引用的数量,而不是尝试禁用 GC。

  • 放宽IPFS的CORS(跨域资源共享)限制

    要放宽IPFS的CORS(跨域资源共享)限制,你可以按照以下步骤进行操作:

    1. 使用IPFS命令行工具配置CORS头信息:
    • 打开终端或命令提示符窗口。
    • 运行以下命令来设置CORS头信息:
      ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]' ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["GET", "POST"]' ipfs config --json API.HTTPHeaders.Access-Control-Allow-Headers '["Authorization"]' ipfs config --json API.HTTPHeaders.Access-Control-Expose-Headers '["Location"]' ipfs config --json API.HTTPHeaders.Access-Control-Allow-Credentials '["true"]'
      这些命令将设置允许所有来源(*)的跨域请求,并指定允许的HTTP方法、请求头、暴露的响应头和是否允许携带凭证(如Cookie)。
    1. 重新启动IPFS守护进程(daemon):
    • 运行以下命令来重新启动IPFS守护进程:
      ipfs daemon
      这将使新的CORS配置生效。

    现在,IPFS将允许来自任何来源的跨域请求。

    请注意,这些配置将应用于IPFS守护进程,而不是IPFS网关。如果你使用的是IPFS网关,你可能需要查看网关的文档以了解如何配置CORS。


    Learn more:

    1. cors – How to do cross-origin requests on IPFS – Stack Overflow
    2. Gateway should allow CORS · Issue #934 · ipfs/kubo · GitHub
    3. How to enable CORS in go-ipfs Dockerfile – Help – IPFS Forums
  • SSE (Server-Sent Events) 概念和工作原理

    一、什么是 SSE?

    Server-Sent Events (SSE) 是一种服务器推送技术,允许服务器单向地将数据推送给客户端。与传统的客户端请求-服务器响应模式不同,SSE 允许服务器在任何时候主动向客户端发送数据,而无需客户端明确请求。

    二、SSE 的工作原理

    1. 建立连接: 客户端使用 EventSource API 建立到服务器的持久 HTTP 连接。
    2. 订阅事件流: 服务器端会生成一个事件流,并将数据以文本流的形式发送给客户端。
    3. 接收和处理数据: 客户端监听 message 事件,并在接收到数据时进行处理。
    4. 保持连接: 连接会一直保持,直到客户端或服务器断开连接。

    三、SSE 的特点

    • 单向推送: 数据传输方向是从服务器到客户端,客户端不能向服务器发送数据。
    • 基于 HTTP 协议: SSE 使用 HTTP 协议进行通信,无需额外的协议支持。
    • 轻量级: SSE 相比 WebSocket 更轻量级,更易于实现和维护。
    • 实时性: SSE 可以实现实时数据推送,但相较于 WebSocket 会有一定的延迟。

    四、SSE 的应用场景

    • 实时数据更新: 例如股票报价、新闻推送、社交媒体通知等。
    • 进度条显示: 例如文件上传、下载进度等。
    • 聊天应用: 例如简单的聊天室、客服系统等。

    五、SSE 与 WebSocket 的比较

    特性SSEWebSocket
    数据传输方向单向双向
    协议HTTPWebSocket
    复杂度
    实时性较低
    应用场景单向数据推送双向实时通信

    六、总结

    SSE 是一种简单高效的服务器推送技术,适用于单向实时数据推送的场景。它易于实现和维护,并且可以与现有 HTTP 基础设施良好兼容。

人生梦想 - 关注前沿的计算机技术 acejoy.com