Nodejs实时通信插件node-sockjs的使用

Nodejs实时通信插件node-sockjs的使用
node-sockjs 是一个用于 Node.js 的库,它可以帮助你实现 Web 应用程序中的实时通信。SockJS 是一种技术,允许在浏览器和服务器之间建立全双工通信通道,即使穿越了防火墙。下面是一个简单的示例,展示如何使用 node-sockjs 实现一个基本的实时通信应用。

1. 安装

首先,你需要安装 sockjssockjs-node

npm install sockjs

2. 创建服务器

接下来,创建一个简单的 Node.js 服务器来处理 SockJS 连接:

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

// 创建 HTTP 服务器
const server = http.createServer();

// 创建 SockJS 服务器
const sockjsServer = sockjs.createServer();

// 处理连接事件
sockjsServer.on('connection', (conn) => {
    console.log('New connection established');

    // 接收消息
    conn.on('data', (message) => {
        console.log(`Received message: ${message}`);
        // 向所有连接发送消息
        sockjsServer.connections.forEach((c) => c.write(message));
    });

    // 当连接断开时
    conn.on('close', () => {
        console.log('Connection closed');
    });
});

// 监听端口
sockjsServer.installHandlers(server, { prefix: '/echo' });

server.listen(9999, '0.0.0.0', () => {
    console.log('Server is running on port 9999');
});

3. 客户端代码

现在,在客户端,你需要使用 SockJS 客户端库来连接到服务器并发送/接收消息:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Real-time Communication</title>
    <script src="/echo/sockjs.min.js"></script>
</head>
<body>
    <input type="text" id="messageInput" placeholder="Type a message...">
    <button onclick="sendMessage()">Send</button>
    <div id="messages"></div>

    <script>
        const sock = new SockJS('/echo');

        function sendMessage() {
            const input = document.getElementById('messageInput');
            sock.send(input.value);
            input.value = '';
        }

        sock.onmessage = function(e) {
            const messagesDiv = document.getElementById('messages');
            messagesDiv.innerHTML += `<p>${e.data}</p>`;
        };

        sock.onclose = function() {
            console.log('Connection closed');
        };
    </script>
</body>
</html>

这个例子展示了如何使用 node-sockjs 实现基本的实时通信功能。服务器监听 /echo 路径上的连接,并将接收到的消息广播给所有连接的客户端。客户端通过 SockJS 连接到服务器,并可以发送和接收消息。

确保你的 HTML 文件可以通过 HTTP 服务器提供,例如,如果你使用的是 Express,你可以这样设置:

const express = require('express');
const app = express();
app.use(express.static(__dirname));

app.listen(9999, () => {
    console.log('App listening on port 9999');
});

这样,你就可以运行服务器,并通过浏览器访问 HTML 页面来测试实时通信功能了。


3 回复

当然,Node.js中的SockJS插件可以让你实现浏览器和服务器之间的实时通信。首先,你需要安装SockJS,可以通过npm来安装:

npm install sockjs

然后,在你的Node.js应用中引入SockJS,并创建一个SockJS服务器:

var http = require('http');
var sockjs = require('sockjs');

var server = sockjs.createServer();
server.on('connection', function(conn) {
    console.log("有人连接了!");
    conn.on('data', function(message) {
        console.log("收到消息:" + message);
        conn.write("我收到了你的消息!");
    });
    conn.on('close', function() {
        console.log("有人断开了连接!");
    });
});

var httpServer = http.createServer();
server.installHandlers(httpServer);
httpServer.listen(9999, '0.0.0.0');

最后,在客户端使用SockJS库连接到服务器:

<script src="https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js"></script>
<script>
  var sock = new SockJS('http://localhost:9999');
  sock.onmessage = function(e) {
      console.log('服务器说:' + e.data);
  };
  sock.onopen = function() {
      console.log('已连接到服务器');
      sock.send('你好,服务器!');
  };
</script>

这样就完成了一个简单的实时通信示例!


SockJS 是一个旨在为浏览器提供流畅、无阻塞的服务器端连接体验的库。它支持多种传输方式,以适应不同的浏览器环境和网络条件。Node.js 中有一个叫做 sockjs-node 的包可以用来实现 SockJS 服务端的功能。

安装

首先你需要安装 sockjs-nodeexpress(如果你打算使用 Express 来搭建你的 HTTP 服务器):

npm install sockjs-node express

示例代码

以下是一个简单的示例,展示如何使用 sockjs-node 和 Express 创建一个基本的 WebSocket 服务器,并且客户端可以连接到这个服务器。

服务器端代码 (server.js)

const http = require('http');
const sockjs = require('sockjs');
const express = require('express');

// 创建Express应用实例
const app = express();
const server = http.createServer(app);

// 创建SockJS服务端实例
const echo = sockjs.createServer({prefix: '/echo'});

// 当客户端连接时触发
echo.on('connection', function(conn) {
    console.log("A client connected");

    // 当从客户端接收到消息时触发
    conn.on('data', function(message) {
        console.log(`Received message: ${message}`);
        // 向客户端发送响应
        conn.write(`Server received: ${message}`);
    });

    // 当连接断开时触发
    conn.on('close', function() {
        console.log("A client disconnected");
    });
});

// 将SockJS中间件添加到HTTP服务器
echo.installHandlers(server, {prefix: '/echo'});

// 启动服务器
server.listen(8080, () => {
    console.log('Server is listening on port 8080');
});

客户端代码 (client.html)

<!DOCTYPE html>
<html>
<head>
    <title>Test SockJS</title>
</head>
<body>
    <script src="https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js"></script>
    <script>
        var sock = new SockJS('http://localhost:8080/echo');

        sock.onopen = function() {
            console.log('Connection open!');
            sock.send('Hello Server!');
        };

        sock.onmessage = function(e) {
            console.log('Message from server:', e.data);
        };

        sock.onclose = function() {
            console.log('Connection closed.');
        };
    </script>
</body>
</html>

这个例子展示了如何设置一个简单的服务器来处理 SockJS 连接,并且如何编写客户端代码来连接到这个服务器。当你打开 client.html 文件时,它会尝试连接到服务器,并在控制台打印消息。

请注意,为了运行这些代码,你需要在你的项目目录中创建 server.jsclient.html 文件,并按照上述方式安装依赖项。然后你可以通过运行 node server.js 来启动服务器,通过浏览器打开 client.html 来测试连接。

node-sockjs 是SockJS的服务器端实现,用于Node.js应用中提供实时通信功能。首先,你需要安装它:

npm install sockjs

然后,在你的Node.js应用中引入并配置SockJS:

var http = require('http');
var sockjs = require('sockjs');

var server = sockjs.createServer();
server.on('connection', function(conn) {
    conn.write('欢迎连接到SockJS!');
    conn.on('data', function(message) {
        console.log('收到消息:' + message);
    });
});
server.installHandlers(httpServer, {prefix:'/echo'});

以上代码创建了一个简单的Echo服务器,任何接收到的消息都会回传给客户端。

回到顶部