跳過到頁腳內容
NODE 說明

faye NPM(開發者的使用方法)

IronPDF 和 Faye 在網頁開發中扮演不同的角色,但他們的技能能夠很好地協同工作。 借助 WebSocket 或其他兼容的傳輸,服務器和網頁客戶端可以通過 NPM 套件 Faye 實現實時通信。 它提供了一個簡單但有效的發布/訂閱 消息系統,使可擴展的即時數據共享網絡應用程序成為可能。 Faye 的最新版本是 4 年前發佈的 1.4.0。 另一方面,另一個名為 IronPDF 的 npm 包允許開發人員在 Node.js 環境中以編程方式創建、修改和轉換 PDF 文檔。

通過將 Faye 與 IronPDF 集成,開發人員可以使用實時 PDF 生產功能改善網絡應用程序。 需要即時生成 PDF 報告、根據用戶輸入或實時數據更改生成動態文檔,以及協作文檔編輯場景的應用程序可能會發現此連接非常有幫助。 在 IronPDF 的 PDF 創建工具和 Faye 的實時簡單發布訂閱消息功能的幫助下,開發人員可以設計數據驅動的、交互式的和適應性強的網絡應用程序,以滿足各種用戶和業務目標。

什麼是 Faye?

一個名為Faye的 Node.js 插件,通過使用 WebSocket 或其他兼容的傳輸協議和 WebSocket 協議,能夠讓客戶端和服務器實現實時通信變得更容易。 它提供了一種發布/訂閱消息機制,使網絡應用程序通信具有可擴展性和高效性。Faye 通過順利處理客戶端和服務器之間的連接和消息路由,旨在使部署實時功能(如現場更新、通知和協作交互)變得不太複雜。 開發人員經常整合 Faye 以改善他們的應用程序,提供需要在用戶和服務器之間實時數據傳輸的協作、交互性和響應性特徵。

faye NPM(開發者如何使用):圖 1 - Faye

Faye 的功能

由於提供了幾個重要的功能,Faye NPM 模塊是一個用於將實時事件消息集成到網絡應用程序中的有用工具:

  • WebSocket 和傳輸協議支持:支持 WebSocket 以及後備方法到替代的傳輸協議,如 HTTP 長輪詢,Faye 能夠與不同的瀏覽器和網絡配置保持實時的通信通道。

  • 發布/訂閱消息:使用 Faye 的發布/訂閱消息模式,用戶可以訂閱特定的頻道(主題)並在那裡發佈後立即收到更新或消息。

  • 可擴展性:得益於其可擴展的架構,它能夠有效地管理大量並發連接和消息,適用於需要高性能和響應的應用程序。

  • 客戶端和服務器端集成:通過集成客戶端(瀏覽器)和服務器端(Node.js),Faye 促進了網絡客戶端和服務器之間的順暢通信。

  • 安全性:它整合了保護 WebSocket 連接以及執行認證和授權過程的技術來調控對頻道和消息的訪問。

  • 易用性:通過使用 Faye 的簡單 API 設置和管理實時通信,開發人員可以用最少的配置創建功能,如實時更新、通知、聊天系統等。

  • 可靠性:Faye 通過管理重新連接和保證消息交付的可靠性,維護了對網絡中斷具有抗性的可靠通信通道。

  • 自定義和擴展性:通過使用插件、擴展和獨特的適配器,開發人員可以增強 Faye 的功能,提供專門的解決方案以滿足某些應用需要。

創建和配置 Faye

必須設置用於構建和配置 Faye 的客戶端集成和服務器端 Faye 實例,這是通過在 Node.js 環境中使用 npm 完成的。 這裡有一份操作指南,幫助您入門:

服務器端設置

安裝 Faye

首先安裝 Faye 包:

npm install faye
npm install faye
SHELL

創建 Faye 服務器

通過在 Node.js 中創建一個server.js文件確保 Faye 服務器的配置:

// server.js

const http = require('http');
const faye = require('faye');

// Create an HTTP server
const server = http.createServer();

// Mount the Faye server at '/faye'
const bayeux = new faye.NodeAdapter({ mount: '/faye', timeout: 45 });

// Attach Faye to the HTTP server
bayeux.attach(server);

// Start the HTTP server
const PORT = 8000;
server.listen(PORT, () => {
    console.log(`Faye server listening on port ${PORT}`);
});
// server.js

const http = require('http');
const faye = require('faye');

// Create an HTTP server
const server = http.createServer();

// Mount the Faye server at '/faye'
const bayeux = new faye.NodeAdapter({ mount: '/faye', timeout: 45 });

// Attach Faye to the HTTP server
bayeux.attach(server);

// Start the HTTP server
const PORT = 8000;
server.listen(PORT, () => {
    console.log(`Faye server listening on port ${PORT}`);
});
JAVASCRIPT

在此實例中,一個 HTTP 服務器監聽端口 8000,Faye 服務器掛載在/faye。 根據應用程序版本的需要調整端口和掛載路由。

客戶端設置

將 Faye 客戶端庫添加到您的 HTML 頁面或使用像 Webpack 或 Browserify 這樣的模組包裝器來完成此操作:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Faye Client Example</title>
  </head>
  <body>
    <!-- Include the Faye client script -->
    <script
      type="text/javascript"
      src="http://localhost:8000/faye/client.js"
    ></script>

    Enter the Message: 
    <input type="text" id="messageInput">
    <button onclick="sendMessage()">Send</button>

    <script>
      // Initialize Faye client
      const client = new Faye.Client('http://localhost:8000/faye');

      // Subscribe to a channel
      client.subscribe('/channel', function(message) {
          console.log('Received message:', message);
          // Handle received messages
      });

      // Function to publish a message
      function sendMessage() {
          const message = document.getElementById('messageInput').value;
          client.publish('/channel', { text: message });
      }
    </script>
  </body>
</html>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Faye Client Example</title>
  </head>
  <body>
    <!-- Include the Faye client script -->
    <script
      type="text/javascript"
      src="http://localhost:8000/faye/client.js"
    ></script>

    Enter the Message: 
    <input type="text" id="messageInput">
    <button onclick="sendMessage()">Send</button>

    <script>
      // Initialize Faye client
      const client = new Faye.Client('http://localhost:8000/faye');

      // Subscribe to a channel
      client.subscribe('/channel', function(message) {
          console.log('Received message:', message);
          // Handle received messages
      });

      // Function to publish a message
      function sendMessage() {
          const message = document.getElementById('messageInput').value;
          client.publish('/channel', { text: message });
      }
    </script>
  </body>
</html>
HTML

適應 Faye 服務器 URL(http://localhost:8000/faye)以及 Faye 客戶端腳本(client.js)的源代碼和 URL 到您的配置。

通過按照這些說明配置 Faye 套件,您可以有效地在您的 Node.js 網絡應用程序中添加實時消息功能。 根據你的特定應用架構和需求修改示例。

開始使用

在使用 IronPDF 進行動態 PDF 生成和 Faye 實現實時通信之前,您需要設置一個 Node.js 服務器來處理 Faye 連接和 PDF 生成請求。 以下是一份詳細的操作指南:

什麼是 IronPDF?

IronPDF for Node.js 是一款設計來將 HTML 文檔數據轉換成高質量 PDF 格式的強大 Node.js 程序。 它加快了將 HTML、CSS 和其他 JavaScript 文件轉換為格式正確的 PDF 的過程,而不會影響原始的在線內容。 這是一個非常實用的工具,用於需要生成動態、可打印文檔的 Web 應用程序,例如發票、證書和報告。

IronPDF 擁有多個功能,包括可自定義的頁面設置、頁眉、頁腳,以及添加字體和圖片的選項。 它可以處理複雜的樣式和佈局,以確保每次 PDF 輸出都符合規範。 此外,IronPDF 控制 HTML 中的 JavaScript 執行,以允許準確渲染動態和互動內容。

faye NPM(開發者如何使用):圖 4 - IronPDF

IronPDF 的特點

  1. 從 HTML 生成 PDF:將 HTML、CSS 和 JavaScript 轉換為 PDF 文件。 支援兩種現代網頁標準:媒體查詢和響應式設計。 方便利用 HTML 和 CSS 動態裝飾 PDF 文件、發票和報告。

  2. PDF 編輯:可以向現有的 PDF 中添加文本、圖像和其他材料。 從 PDF 文件中提取文本和圖像。 將多個 PDF 合併為一個文件。將 PDF 文件拆分為多個不同的文檔。 添加頁眉、頁腳、註釋和水印。

  3. 性能與可靠性:在工業環境中,高性能和高可靠性是產品設計的期望特徵。 輕鬆處理大量文檔集。

安裝 IronPDF

要獲得在 Node.js 項目中處理 PDF 所需的工具,安裝 IronPDF 包。 運行以下命令:

npm install @ironsoftware/ironpdf
npm install @ironsoftware/ironpdf
SHELL

將 Faye 與 IronPDF 結合

創建一個基本的 Node.js 服務器,將 IronPDF 用於 PDF 生產,並將 Faye 用於實時消息:

// server.js

const http = require('http');
const faye = require('faye');
const IronPdf = require('@ironsoftware/ironpdf');

// Configure IronPDF license (if required)
var config = IronPdf.IronPdfGlobalConfig;
config.setConfig({
    licenseKey: "",  // Set your license key here
});

// Create an HTTP server
const server = http.createServer();

// Create a Faye server
const bayeux = new faye.NodeAdapter({ mount: '/faye', timeout: 45 });

// Attach the Faye server to the HTTP server
bayeux.attach(server);

// Handle Faye client connections
bayeux.on('handshake', function(clientId) {
    console.log(`Client connected: ${clientId}`);
});

// Handle incoming messages for PDF generation
bayeux.on('publish', async function (clientId, channel, data) {
    if (channel === '/generate_pdf') {
        console.log(`Received PDF generation request from client ${clientId}: ${data.htmlContent}`);
        // Generate PDF using IronPDF
        let pdfData = await generatePdf(data.htmlContent);
        var base64String = btoa(String.fromCharCode.apply(null, new Uint8Array(pdfData)));
        bayeux.getClient().publish(`/pdf_result/${clientId}`, { pdfData: base64String });
    }
});

// Function to generate PDF using IronPDF
const generatePdf = async (htmlContent) => {
    const pdfDocument = IronPdf.PdfDocument;
    let result = (await pdfDocument.fromHtml(htmlContent));
    const pdfBuffer = await result.saveAsBuffer();
    return pdfBuffer;
};

// Start the HTTP server
const PORT = 3000;
server.listen(PORT, function() {
    console.log(`Server listening on port ${PORT}`);
});
// server.js

const http = require('http');
const faye = require('faye');
const IronPdf = require('@ironsoftware/ironpdf');

// Configure IronPDF license (if required)
var config = IronPdf.IronPdfGlobalConfig;
config.setConfig({
    licenseKey: "",  // Set your license key here
});

// Create an HTTP server
const server = http.createServer();

// Create a Faye server
const bayeux = new faye.NodeAdapter({ mount: '/faye', timeout: 45 });

// Attach the Faye server to the HTTP server
bayeux.attach(server);

// Handle Faye client connections
bayeux.on('handshake', function(clientId) {
    console.log(`Client connected: ${clientId}`);
});

// Handle incoming messages for PDF generation
bayeux.on('publish', async function (clientId, channel, data) {
    if (channel === '/generate_pdf') {
        console.log(`Received PDF generation request from client ${clientId}: ${data.htmlContent}`);
        // Generate PDF using IronPDF
        let pdfData = await generatePdf(data.htmlContent);
        var base64String = btoa(String.fromCharCode.apply(null, new Uint8Array(pdfData)));
        bayeux.getClient().publish(`/pdf_result/${clientId}`, { pdfData: base64String });
    }
});

// Function to generate PDF using IronPDF
const generatePdf = async (htmlContent) => {
    const pdfDocument = IronPdf.PdfDocument;
    let result = (await pdfDocument.fromHtml(htmlContent));
    const pdfBuffer = await result.saveAsBuffer();
    return pdfBuffer;
};

// Start the HTTP server
const PORT = 3000;
server.listen(PORT, function() {
    console.log(`Server listening on port ${PORT}`);
});
JAVASCRIPT

客戶端設置

在客戶端配置 Faye 以與服務器進行交互並提交 PDF 創建請求:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Faye + IronPDF Example</title>
</head>
<body>
    <button onclick="generatePdf()">Generate PDF</button>

    <!-- Include the Faye client library -->
    <script src="https://cdn.jsdelivr.net/npm/faye/browser/faye-browser.min.js"></script>

    <script>
        // Initialize Faye client
        const client = new Faye.Client('http://localhost:3000/faye');

        // Subscribe to receive PDF result messages
        client.subscribe('/pdf_result/*', function(message) {
            console.log('PDF received:', message);
            displayPdf(message.pdfData);
        });

        // Function to request PDF generation
        function generatePdf() {
            // Example: HTML content to generate PDF
            const htmlContent = '<html><body><h1>Hello IronPDF!</h1></body></html>';

            // Send HTML content to server for PDF generation
            client.publish('/generate_pdf', { htmlContent: htmlContent });
        }

        // Function to display the generated PDF
        function displayPdf(pdfData) {
            // Example: Display or download PDF data received from server
            const pdfBlob = new Blob([Uint8Array.from(atob(pdfData), c => c.charCodeAt(0))], { type: 'application/pdf' });
            const pdfUrl = URL.createObjectURL(pdfBlob);
            window.open(pdfUrl, '_blank');
        }
    </script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Faye + IronPDF Example</title>
</head>
<body>
    <button onclick="generatePdf()">Generate PDF</button>

    <!-- Include the Faye client library -->
    <script src="https://cdn.jsdelivr.net/npm/faye/browser/faye-browser.min.js"></script>

    <script>
        // Initialize Faye client
        const client = new Faye.Client('http://localhost:3000/faye');

        // Subscribe to receive PDF result messages
        client.subscribe('/pdf_result/*', function(message) {
            console.log('PDF received:', message);
            displayPdf(message.pdfData);
        });

        // Function to request PDF generation
        function generatePdf() {
            // Example: HTML content to generate PDF
            const htmlContent = '<html><body><h1>Hello IronPDF!</h1></body></html>';

            // Send HTML content to server for PDF generation
            client.publish('/generate_pdf', { htmlContent: htmlContent });
        }

        // Function to display the generated PDF
        function displayPdf(pdfData) {
            // Example: Display or download PDF data received from server
            const pdfBlob = new Blob([Uint8Array.from(atob(pdfData), c => c.charCodeAt(0))], { type: 'application/pdf' });
            const pdfUrl = URL.createObjectURL(pdfBlob);
            window.open(pdfUrl, '_blank');
        }
    </script>
</body>
</html>
HTML

服務器端:Node.js 服務器整合了一個 Faye 服務器(bayeux),並配置了一個 HTTP 服務器。 它監視/generate_pdf頻道上的來自客戶端的消息和連接。 在收到生成 PDF 的請求後,使用 IronPDF 將提供的 HTML 信息轉換為 PDF,並將完成的 PDF 數據作為便於使用的消息返回給客戶端。

客戶端:瀏覽器客戶端創建到服務器的 Faye 連接(client),並訂閱/pdf_result/*頻道,以獲得生成的 PDF 數據。 “生成 PDF”按鈕會將 HTML 內容請求發送到服務器,然後服務器使用client.publish('/generate_pdf', { htmlContent: htmlContent })來生成 PDF。 收到 PDF 數據後,它會顯示或下載 PDF。

結論

通過將 Faye 與 IronPDF 集成,現代網絡應用程序提供了一個可靠的解決方案,結合了動態 PDF 創建和實時消息的優勢。 Faye 的發布/訂閱消息系統支持需要實時更新的應用程序,如 bug 跟蹤、通知和團隊工作能力,使即時的客戶端與服務器通信成為可能。 相反,IronPDF 能夠以編程方式創建、修改和轉換 PDF 文檔,允許根據用戶輸入或實時數據動態生成報告、發票和其他文檔。

這些技術可以集成以提供動態創建的內容和即時反饋,從而提高用戶體驗。 例如,消費者不必等待批處理過程或刷新網站,即可獲得即時處理的 PDF 報告請求。 網絡應用程序變得更具響應性和高效性,使其交互性和用戶友好性提高。

通過集成 IronPDF 和Iron Software,我們可以將 OCR、條形碼掃描、PDF 輸出、Excel 交互以及許多其他功能添加到您的 Node.js 應用開發工具箱中,增強其功能。 Iron Software 的龐大社區支持插件庫和高度可配置的技術使開發人員能夠更快速地創建功能和網絡應用程序。

在決定購買之前,開發人員可以利用 IronPDF 的許多功能,享受免費試用版和來自公司的各種原始碼範例。 查看授權頁面以獲得有關 IronPDF 永久授權的詳細信息。 訪問項目文檔頁面以獲取有關如何開始使用 IronPDF 的更多信息。

Darrius Serrant
全棧軟件工程師 (WebOps)

Darrius Serrant 擁有邁阿密大學計算機科學學士學位,目前任職於 Iron Software 的全栈 WebOps 市場營銷工程師。從小就迷上編碼,他認為計算既神秘又可接近,是創意和解決問題的完美媒介。

在 Iron Software,Darrius 喜歡創造新事物,並簡化複雜概念以便於理解。作為我們的駐場開發者之一,他也自願教學生,分享他的專業知識給下一代。

對 Darrius 來說,工作令人滿意因為它被重視且有實際影響。