节点帮助

sockjs NPM(如何为开发人员工作)

发布 2024年十月24日
分享:

介绍

SockJS 和 IronPDF 在构建在线应用程序中发挥着不同但互补的作用。 一个名为 SockJS 的 JavaScript 软件包提供了一个双向超文本传输协议用于客户端与服务器通信的 API,类似于 WebSockets。 它使网络浏览器和服务器通过事件进行实时通信成为可能,使聊天室、实时新闻和团队协作工具等应用程序的使用成为可能。 然而,在 Node.js 设置中,IronPDF 是一个强大的 JavaScript 库,它为以编程方式制作和修改 PDF 文档提供了它。

IronPDF 允许动态创建和管理 PDF 文档,而 SockJS 客户端则通过跨域通信通道管理在线应用程序中的实时数据交换和协作功能。 通过将 SockJS 服务器对应程序与 IronPDF 集成,开发人员可以根据动态数据或用户交互轻松生成和提供 PDF 文档,同时通过实时更改增强应用程序。 通过这种组合,开发人员可以设计出复杂的在线应用程序,利用实时通信和动态 PDF 创建功能,支持文档密集型应用程序和协作平台等各种用例。

什么是 SockJS NPM?

SockJS是一个浏览器端 JavaScript 库,可促进网络客户端和服务器之间的实时双向通信。 它对 WebSocket 进行了抽象,并为 HTTP 长轮询和 XHR 流等替代传输协议提供了后备机制,确保在各种网络浏览器和环境中的兼容性。 它提供了一个简单明了的 JavaScript API,用于建立和管理连接以及处理连接打开、消息接收和关闭等事件。 此外,SockJS 还包括一个用于测试和调试的命令行客户端,使其成为开发和生产环境的通用工具。 总之,SockJS JavaScript 对象简化了网络应用程序中实时功能的实现,支持可扩展的响应式通信渠道。

sockjs NPM(如何为开发人员工作):图 1 - SockJS

SockJS 的主要功能

跨浏览器兼容性

SockJS 可确保在多种网络浏览器和环境中实现一致的行为和功能。

回退机制

如果 WebSocket 连接不可用或失败,SockJS 可以透明地切换到其他传输协议,如 HTTP 长轮询、XHR 流甚至 JSONP 轮询。

实时通信

它允许服务器端应用程序(通常使用 Node.js 或其他服务器端技术)和客户端 JavaScript 应用程序(在网络浏览器中运行)以实时和事件驱动的方式进行交流。

易用性

由于 SockJS 提供了等同于 WebSocket 的直接 API,开发人员可以轻松地将其纳入自己的项目并加以利用。

可扩展性

SockJS 通过支持多种传输协议和回退技术,促进了可扩展应用程序的开发,这些应用程序可以管理大量并发连接和各种网络情况。

易于集成

它通过提供一个简单的 API,使实时功能的实现变得更加容易,开发人员无需进行复杂的底层网络编程,即可将其纳入自己的网络应用程序。

传输协议抽象

SockJS 对 WebSocket、HTTP 长轮询和其他底层传输协议进行了抽象。 由于其适应性强,即使在 WebSocket 连接受限或不可用的情况下,也能保证可靠的通信。

创建和配置 SockJS

您通常需要在客户端设置 SockJS(在您的网络浏览器中)和服务器端(即使是使用 Node.js 这样的浏览器或服务器框架)翻译的目的是在在线应用程序中构建和配置实时通信。 以下是创建和配置 SockJS 的基本方法:

安装 SockJS

SockJS 可以使用 NPM 安装,也可以直接通过 CDN 安装:

npm install sockjs-client
npm install sockjs-client
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'npm install sockjs-client
VB   C#

在 HTML 中包含 SockJS

在您创建的 HTML 文件中包含 SockJS JavaScript 库:

<script src="https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js"></script>
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'<script src="https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js"></script>
VB   C#

初始化 SockJS 连接

在 JavaScript 文件中创建 SockJS 实例(app.js 或类似内容)并连接到您的服务器:

<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>SockJS + IronPDF Example</title>
  </head>
  <body>
    <script src="https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js"></script>
    <script>
      const sock = new SockJS("http://localhost:3000/socket");
      sock.onopen = function () {
        console.log("Connection opened");
      };
      sock.onmessage = function (e) {
        console.log("Message received:", e.data);
      };
      sock.onclose = function () {
        console.log("Connection closed");
      };
      // Example of sending a message
      function sendMessage(message) {
        sock.send(message);
      }
    </script>
    Enter the Message : 
  </body>
</html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>SockJS + IronPDF Example</title>
  </head>
  <body>
    <script src="https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js"></script>
    <script>
      const sock = new SockJS("http://localhost:3000/socket");
      sock.onopen = function () {
        console.log("Connection opened");
      };
      sock.onmessage = function (e) {
        console.log("Message received:", e.data);
      };
      sock.onclose = function () {
        console.log("Connection closed");
      };
      // Example of sending a message
      function sendMessage(message) {
        sock.send(message);
      }
    </script>
    Enter the Message : 
  </body>
</html>
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <html lang="en"> <head> <meta charset="UTF-8" /> <title> SockJS + IronPDF Example</title> </head> <body> <script src="https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js"></script> <script> const sock = new SockJS("http://localhost:3000/socket");
"https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js"></script> (Of script) const sock = New SockJS("http://localhost:3000/socket")
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private <html lang="en"> <head> <meta charset="UTF-8" /> <title> SockJS + IronPDF Example</title> </head> <body> <script src="https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js"></script> <script> const sock
"UTF-8" /> (Of title) SockJS + IronPDF Example</title> </head> (Of body) <script src="https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js"></script> (Of script) const sock
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private <html lang="en"> <head> <meta charset="UTF-8" /> <title> SockJS + IronPDF Example</title> </head> <body> <script src
"en"> (Of head) <meta charset="UTF-8" /> (Of title) SockJS + IronPDF Example</title> </head> (Of body) <script src
Private Private Private Private <html lang="en"> (Of head) <meta charset
	  sock.onopen = [function]()
	  If True Then
		console.log("Connection opened")
	  End If
	  sock.onmessage = [function](e)
	  If True Then
		console.log("Message received:", e.data)
	  End If
	  sock.onclose = [function]()
	  If True Then
		console.log("Connection closed")
	  End If
	  ' Example of sending a message
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'	  @function sendMessage(message)
'	  {
'		sock.send(message);
'	  }
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'	</script> Enter the Message : </body> </html>
VB   C#

您应该使用服务器端 WebSocket 端点的 URL,而不是 "http://localhost:3000/socket"。

sockjs NPM(如何为开发人员工作):图 2 - SockJS 连接输出

服务器端设置

安装 SockJS-Node

要安装 SockJS-Node 软件包,请使用 npm:

npm install sockjs
npm install sockjs
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'npm install sockjs
VB   C#

配置 SockJS 服务

在 Node.js 服务器中配置 SockJS:

const http = require('http');
const sockjs = require('sockjs');
// Create a SockJS server
const sockjsServer = sockjs.createServer();
// Attach the server to an HTTP server instance
const server = http.createServer();
sockjsServer.installHandlers(server, { prefix: '/socket' });
// Define SockJS event handlers
sockjsServer.on('connection', function(conn) {
    console.log('Client connected');
    conn.on('data', function(message) {
        console.log('Received message:', message);
        // Handle incoming messages from client
    });
    conn.on('close', function() {
        console.log('Client disconnected');
    });
});
// Start the server
const PORT = 3000;
server.listen(PORT, function() {
    console.log(`Server listening on port ${PORT}`);
});
const http = require('http');
const sockjs = require('sockjs');
// Create a SockJS server
const sockjsServer = sockjs.createServer();
// Attach the server to an HTTP server instance
const server = http.createServer();
sockjsServer.installHandlers(server, { prefix: '/socket' });
// Define SockJS event handlers
sockjsServer.on('connection', function(conn) {
    console.log('Client connected');
    conn.on('data', function(message) {
        console.log('Received message:', message);
        // Handle incoming messages from client
    });
    conn.on('close', function() {
        console.log('Client disconnected');
    });
});
// Start the server
const PORT = 3000;
server.listen(PORT, function() {
    console.log(`Server listening on port ${PORT}`);
});
const http = require( 'http');
const sockjs = require( 'sockjs');
' Create a SockJS server
const sockjsServer = sockjs.createServer()
' Attach the server to an HTTP server instance
const server = http.createServer()
sockjsServer.installHandlers(server, { prefix: '/socket' });
' Define SockJS event handlers
sockjsServer.on( 'connection', @function(conn) { console.log('Client connected'); conn.on('data', @function(message) { console.log('Received message:', message); }); conn.on('close', @function() { console.log('Client disconnected'); }); });
' Start the server
const PORT = 3000
server.listen(PORT, [function]() { console.log(`Server listening on port ${PORT}`); })
VB   C#

确保服务器端代码是定制的,以满足您的应用程序的要求,并能与您已有的服务器框架或配置一起使用。

sockjs NPM(如何为开发人员工作):图 3 - SockJS 服务器符合配置输出

跨源请求(CORS):如果您的服务器和客户端位于不同的域上,请注意测试服务器能否有效处理 CORS 设置。

错误处理: 根据您应用程序的规范,在浏览器限制中实施错误处理和安全措施(如身份验证和授权).

部署: 为安全连接设置 HTTPS,为部署环境配置 SockJS 和服务器。

本配置为使用 SockJS 在网络客户端和网络服务器之间建立实时通信提供了基本依据。 根据您特定应用程序的要求和架构,可能需要进行调整。

开始

建立一个利用 SockJS 的实时通信功能并集成 IronPDF 进行动态 PDF 创建的网络应用程序是开始使用 SockJS 和 IronPDF 的第一步。 以下是起点指南:

什么是IronPDF?

一个名为IronPDFPDF 是将 HTML 数据转换成超高质量 PDF 文件的工具。 在不牺牲原始网页内容的情况下,它加快了将HTML、CSS和其他JavaScript文件转换为正确格式的PDF的过程。 对于需要生成动态、可打印文档(如报告、发票和证书)的 web 应用程序来说,这是一个非常有用的工具。

可自定义的页面设置、页眉、页脚,以及添加字体和图像的功能只是IronPDF的众多功能之一。 它可以处理复杂的布局和样式,确保每个测试 PDF 输出都符合要求。 此外,IronPDF 管理在 HTML 中执行 JavaScript,从而实现精确的动态和交互内容渲染。

sockjs NPM(如何为开发人员工作):图 4 - IronPdf

IronPDF 的功能

从HTML生成PDF

将JavaScript、HTML和CSS转换为PDF。 支持媒体查询和响应式设计这两种当代网络标准。 该工具适用于使用 HTML 和 CSS 对 PDF 报告、发票和文档进行动态装饰。

2. PDF编辑

现有的PDF可以添加文本、照片和其他内容。 从 PDF 文件中提取文字和图片。 将多个 PDF 文件合并为一个文件。将 PDF 文件分成多个独立文件。 包括水印、注释、页眉和页脚。

3. 性能和可靠性

高性能和可靠性是在工业环境中所期望的设计特性。 轻松管理大型文档集。

安装 IronPDF

安装 IronPDF 软件包,获得在 Node.js 项目中处理 PDF 所需的工具。 在命令行中添加以下代码行。

npm install @ironsoftware/ironpdf
npm install @ironsoftware/ironpdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'npm install @ironsoftware/ironpdf
VB   C#

将 SockJS 与 IronPDF 结合使用

在 Node.js 服务器上配置 SockJS,以处理生成 PDF 的请求并管理客户端连接:

// server.js
const http = require("http");
const sockjs = require("sockjs");
const IronPdf = require("@ironsoftware/ironpdf");
var config = IronPdf.IronPdfGlobalConfig;
config.setConfig({
  licenseKey:
    "",
});
// Create a SockJS server
const sockjsServer = sockjs.createServer();
// Attach the server to an HTTP server instance
const server = http.createServer();
sockjsServer.installHandlers(server, { prefix: "/socket" });
// Handle SockJS connections and messages
sockjsServer.on("connection", function (conn) {
  console.log("Client connected");
  // Handle incoming messages (PDF generation requests)
  conn.on("data", async function(message) {
    console.log("Received message:", message);
    // Generate PDF using IronPDF
    let pdfdata = await generatePdf(message);
    // Send generated PDF data back to client
    conn.write(pdfdata);
  });
  conn.on("close", function () {
    console.log("Client disconnected");
  });
});
// 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 sockjs = require("sockjs");
const IronPdf = require("@ironsoftware/ironpdf");
var config = IronPdf.IronPdfGlobalConfig;
config.setConfig({
  licenseKey:
    "",
});
// Create a SockJS server
const sockjsServer = sockjs.createServer();
// Attach the server to an HTTP server instance
const server = http.createServer();
sockjsServer.installHandlers(server, { prefix: "/socket" });
// Handle SockJS connections and messages
sockjsServer.on("connection", function (conn) {
  console.log("Client connected");
  // Handle incoming messages (PDF generation requests)
  conn.on("data", async function(message) {
    console.log("Received message:", message);
    // Generate PDF using IronPDF
    let pdfdata = await generatePdf(message);
    // Send generated PDF data back to client
    conn.write(pdfdata);
  });
  conn.on("close", function () {
    console.log("Client disconnected");
  });
});
// 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 sockjs = require("sockjs")
const IronPdf = require("@ironsoftware/ironpdf")
Dim config = IronPdf.IronPdfGlobalConfig
config.setConfig({ licenseKey:= ""})
' Create a SockJS server
const sockjsServer = sockjs.createServer()
' Attach the server to an HTTP server instance
const server = http.createServer()
sockjsServer.installHandlers(server, { prefix:= "/socket" })
' Handle SockJS connections and messages
sockjsServer.on("connection", [function](conn) { console.log("Client connected"); conn.on("data", async [function](message) { console.log("Received message:", message); let pdfdata = Await generatePdf(message); conn.write(pdfdata); }); conn.on("close", [function]() { console.log("Client disconnected"); }); })
' Function to generate PDF using IronPDF
const generatePdf = Async Function(htmlContent)
  const pdfDocument = IronPdf.PdfDocument
  Dim result As let = (Await pdfDocument.fromHtml(htmlContent))
  const pdfBuffer = Await result.saveAsBuffer()
  Return pdfBuffer
End Function
' Start the HTTP server
const PORT = 3000
server.listen(PORT, [function]() { console.log(`Server listening on port ${PORT}`); })
VB   C#

客户端设置

在客户端配置 SockJS,以便与服务器交互并提交生成 PDF 的请求。

<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>SockJS + IronPDF Example</title>
</head>
<body>
    <button onclick="generatePdf()">Generate PDF</button>
    // add SockJS browser JavaScript library
    <script src="https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js"></script>
    <script>
        const sock = new SockJS('http://localhost:3000/socket');
        sock.onopen = function() {
            console.log('Connection opened');
        };
        sock.onmessage = function(e) {
            console.log('PDF received');
            // Example: Display or download PDF received from server
            displayPdf(e.data);
        };
        sock.onclose = function() {
            console.log('Connection closed');
        };
        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
            sock.send(htmlContent);
        }
        function displayPdf(pdfData) {
            // Example: Display or download PDF data received from server
            const pdfBlob = new Blob([atob(pdfData)], { type: 'application/pdf' });
            const pdfUrl = URL.createObjectURL(pdfBlob);
            window.open(pdfUrl, '_blank');
        }
    </script>
</body>
</html>
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>SockJS + IronPDF Example</title>
</head>
<body>
    <button onclick="generatePdf()">Generate PDF</button>
    // add SockJS browser JavaScript library
    <script src="https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js"></script>
    <script>
        const sock = new SockJS('http://localhost:3000/socket');
        sock.onopen = function() {
            console.log('Connection opened');
        };
        sock.onmessage = function(e) {
            console.log('PDF received');
            // Example: Display or download PDF received from server
            displayPdf(e.data);
        };
        sock.onclose = function() {
            console.log('Connection closed');
        };
        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
            sock.send(htmlContent);
        }
        function displayPdf(pdfData) {
            // Example: Display or download PDF data received from server
            const pdfBlob = new Blob([atob(pdfData)], { type: 'application/pdf' });
            const pdfUrl = URL.createObjectURL(pdfBlob);
            window.open(pdfUrl, '_blank');
        }
    </script>
</body>
</html>
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'<!-- index.html -- > <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title> SockJS + IronPDF Example</title> </head> <body> <button onclick="generatePdf()"> Generate PDF</button> <script src="https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js"></script> <script> const sock = New SockJS('http: sock.onopen = @function() { console.log('Connection opened'); }; sock.onmessage = @function(e) { console.log('PDF received'); displayPdf(e.data); }; sock.onclose = @function() { console.log('Connection closed'); }; @function generatePdf() { const htmlContent = '<html><body><h1> Hello, IronPDF!</h1></body></html>'; sock.send(htmlContent); } @function displayPdf(pdfData) { const pdfBlob = New Blob([atob(pdfData)], { type: 'application/pdf' }); const pdfUrl = URL.createObjectURL(pdfBlob); window.open(pdfUrl, '_blank'); } </script> </body> </html>
VB   C#

服务器端: SockJS 服务器(sockjsServer)Node.js 服务器会配置 Node.js,然后监视 /socket 端口上的连接。 它使用 IronPDF(IronPdf.PdfDocument)调用 generatePdf()功能,以便处理收到的信息(生成 PDF 的要求). 生成 PDF 后,它使用 SockJS 连接将 base64 编码的 PDF 数据发送回客户端。

sockjs NPM(如何为开发人员工作):图 5 - SockJS 客户端源代码输出

客户端: 客户端通过 SockJS 连接连接到服务器(袜子)我们还将翻译 "on-open"、"on-message "和 "on-close "等事件。 用户使用 sock.send(html内容)发送 HTML 内容(html内容)当他们单击 "生成 PDF "按钮时,会将 PDF 文件传输到服务器进行生成。 从服务器获取 PDF 数据后,将 PDF 显示或下载到客户端(sock.onmessage).

sockjs NPM(如何为开发人员工作):图 6 - 客户端输出

以下是代码生成的输出结果。

sockjs NPM(如何为开发人员工作):图 7 - PDF 输出

结论

在网络应用程序开发中,当 SockJS 用于实时通信,IronPDF 用于动态 PDF 制作时,就会产生强大的协同效应。 有了 SockJS,客户端和服务器之间的双向通信就变得非常容易,从而实现了交互式协作和实时更新等功能。 然而,IronPdf 赋予程序员以编程方式创建和修改 PDF 文档的能力。 它甚至可以将 HTML 文本动态转换为 PDF。

通过集成这些技术,复杂的网络应用程序可以根据用户输入或实时数据更新即时创建 PDF 文档。 需要实时文档生成、群组编辑或交互式报告功能的应用程序会发现这种集成特别有用。 通过利用 SockJS 进行即时更新和 IronPDF 进行动态 PDF 创建,开发人员可以优化用户体验、优化工作流程,并为任何 SockJS 认真用户提供满足一系列业务要求的弹性解决方案。

我们可以通过以下方式提高您的 Node.js 应用程序开发工具包的实用性IronPDF以添加 OCR、条形码扫描、PDF 制作、Excel 交互以及许多其他功能。 Iron Software的高度可配置系统和广泛的社区支持插件库使开发人员能够更快地构建功能和网络应用程序。

开发人员可以免费使用IronPDF的众多功能。试用许可以及公司提供的一系列代码示例,然后再选择购买。 有关 IronPdf 永久许可的更多信息,请访问许可页面。 有关如何开始使用 IronPDF 的进一步说明,请访问文档页面。

< 前一页
browserify NPM(如何为开发人员工作)
下一步 >
JsdomNPM(如何为开发人员工作)

准备开始了吗? 版本: 2024.11 刚刚发布

免费 npm 安装 查看许可证 >