跳過到頁腳內容
NODE 說明

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

IronPDF 和 Faye 在 Web 開發中扮演不同的角色,但他們的技能可以很好地互補。 借助 NPM 套件 Faye,伺服器和 Web 用戶端可以使用 WebSocket 或其他相容的傳輸方式進行即時通訊。 它提供了一個簡單而有效的發布/訂閱訊息系統,可實現可擴展、即時的資料共享 Web 應用程式。 Faye 的最新版本是 1.4.0,發佈於 4 年前。 相反,另一個名為 IronPDF 的 npm 套件允許開發人員在 Node.js 環境中以程式設計方式建立、修改和轉換 PDF 文件。

開發者可以透過將 Faye 與 IronPDF 集成,利用即時 PDF 生成功能來改進 Web 應用程式。 對於需要即時產生 PDF 報告、根據使用者輸入或即時資料更改動態生成文件以及協作文件編輯場景的應用程式來說,這種連接可能非常有用。 透過 IronPDF 的 PDF 創建工具和 Faye 的即時簡單發布/訂閱訊息功能,開發人員可以設計數據驅動、互動式和可適應的 Web 應用程序,以滿足各種用戶和業務目標。

Faye是什麼?

一款名為Faye的 Node.js 外掛程式可讓用戶端和伺服器更輕鬆地使用 WebSocket 或其他相容的傳輸和 WebSocket 協定進行即時通訊。 它提供了一種發布/訂閱訊息機制,使 Web 應用程式通訊更具可擴展性和高效性。 Faye 旨在透過流暢地處理用戶端和伺服器之間的連線和訊息路由,簡化即時功能(例如即時更新、通知和協作互動)的部署。 Faye 經常被開發者整合到他們的應用程式中,以增強其協作、互動式和響應式功能,這些功能需要在使用者和伺服器之間進行即時資料傳輸。

! faye NPM(開發者使用指南):圖 1 - Faye

費伊的特點

Faye NPM 模組是一個用於將即時事件訊息整合到 Web 應用程式中的實用工具,因為它提供了幾個重要的功能:

  • WebSocket 和傳輸協定支援: Faye 支援 WebSocket 和回退到其他傳輸協定(例如 HTTP 長輪詢)的方法,可以與不同的瀏覽器和網路配置保持即時通訊通道。

-發布/訂閱訊息:借助 Faye 的發布/訂閱訊息模式,用戶可以訂閱特定頻道(主題),並在更新或訊息發布後立即收到通知。

-可擴展性:憑藉其可擴展的架構,它可以有效地管理大量的並發連接和訊息,使其適用於對效能和回應速度有較高要求的應用程式。

-客戶端和服務端整合: Faye 透過整合客戶端(瀏覽器)和服務端(Node.js),促進 Web 用戶端和伺服器之間的順暢通訊。

-安全性:為了規範對頻道和訊息的訪問,它採用了保護 WebSocket 連接的技術,並執行身份驗證和授權程序。

-易用性:開發者可以使用 Faye 簡單易用的 API 來設定和管理即時通信,從而創建即時更新、通知、聊天系統等功能,而無需進行太多配置。

-可靠性: Faye 透過管理重新連接和保證訊息傳遞的可靠性,維護了能夠抵禦網路中斷的強大通訊管道。

-自訂和可擴展性:透過使用插件、擴充功能和獨特的適配器,開發人員可以增強 Faye 的功能,並提供專門的解決方案來滿足某些應用程式的需求。

創建和配置 Faye

在 Node.js 環境中,必須設定客戶端整合和服務端 Faye 實例,才能使用 NPM 建置和設定 Faye。 以下是一份入門指南:

伺服器端設定

安裝 Faye

請先安裝 Faye 軟體包:

npm install faye
npm install faye
SHELL

創建 Faye 伺服器

請確保已配置 Faye 伺服器,方法是在 Node.js 中建立server.js檔案:

// 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

在這種情況下,監聽連接埠 8000 的 HTTP 伺服器將 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 Web 應用程式中有效地新增即時訊息功能。 根據您特定應用程式的架構和需求修改範例。

開始

在您可以使用 IronPDF 進行動態 PDF 產生和使用 Faye 進行即時通訊之前,您需要設定一個 Node.js 伺服器來處理 Faye 連線和 PDF 產生請求。 以下是詳細的方法:

什麼是 IronPDF?

IronPDF for Node.js是一款功能強大的 Node.js 程序,旨在將 HTML 資料轉換為極高品質的 PDF 檔案。 它能加快將 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 文件、發票和報告。

  1. 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 資料作為易於使用的訊息傳回給客戶端。

客戶端:為了取得產生的 PDF 數據,瀏覽器用戶端會建立一個 Faye 連線( client )到伺服器,並訂閱/pdf_result/*通道。 "產生 PDF"按鈕使用戶向伺服器發送 HTML 內容請求,然後伺服器使用該請求透過client.publish(&#39;/generate_pdf&#39;, { htmlContent: htmlContent })產生 PDF。 它在接收 PDF 資料後顯示或下載 PDF 檔案。

結論

透過將 Faye 與 IronPDF 集成,結合動態 PDF 創建和即時訊息的優勢,為現代 Web 應用程式提供了一個可靠的解決方案。 Faye 的發布/訂閱訊息系統實現了即時客戶端-伺服器通信,支援需要即時更新的應用程序,例如錯誤追蹤器、通知和團隊協作功能。 相反,IronPDF 支援以程式設計方式建立、修改和轉換 PDF 文檔,從而能夠根據使用者輸入或即時資料動態產生報告、發票和其他文檔。

這些技術可以整合起來,提供動態創建的內容和即時回饋,從而改善使用者體驗。 例如,消費者無需等待批量處理或刷新網站即可收到立即處理的 PDF 報告請求。 由於這種流暢的交互,Web 應用程式的響應速度和效率都得到了提升,從而增強了其互動性和用戶友好性。

透過整合 IronPDF 和Iron Software ,我們可以將 OCR、條碼掃描、PDF 輸出、Excel 互動以及許多其他功能添加到您的 Node.js 應用程式開發工具箱中,從而提高其實用性。 Iron Software 擁有龐大的社群支援外掛程式庫和高度可設定的技術,讓開發人員能夠更快地建立功能和 Web 應用程式。

在決定購買之前,開發人員可以利用 IronPDF 的免費試用許可證和公司提供的各種原始程式碼範例來體驗其眾多功能。 有關 IronPDF 永久許可的更多詳細信息,請參閱許可頁面。 請造訪專案文件頁面,以了解有關如何開始使用 IronPDF 的更多詳細資訊。

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

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

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

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