nodejs socket一对一通信

2025-04-14 20

Image

Node.js Socket一对一通信

在现代网络应用中,实时通信的需求越来越普遍。通过Node.js和Socket.IO,我们可以轻松实现客户端与服务器之间的一对一通信。提供几种解决方案,并详细说明如何实现。

解决方案

为了实现Node.js中的Socket一对一通信,我们可以通过以下步骤完成:
1. 使用Socket.IO库来创建一个WebSocket服务器。
2. 在客户端和服务器之间建立连接。
3. 通过的标识符(如用户ID)区分不同的客户端。
4. 实现消息的发送和接收功能。

接下来,我们将具体的实现方法。


方法一:使用Socket.IO实现一对一通信

1. 安装依赖

确保安装了Node.js环境。然后,在项目目录下运行以下命令以安装Socket.IO:

bash
npm install socket.io

2. 创建服务器端代码

以下是服务器端的代码示例:

javascript
// server.js
const http = require('http');
const { Server } = require('socket.io');</p>

<p>// 创建HTTP服务器
const server = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello Worldn');
});</p>

<p>// 初始化Socket.IO
const io = new Server(server);</p>

<p>// 存储用户信息的映射表
const users = {};</p>

<p>// 当客户端连接时触发
io.on('connection', (socket) => {
    console.log('A user connected:', socket.id);</p>

<pre><code>// 用户登录并绑定ID
socket.on('login', (userId) => {
    users[userId] = socket.id;
    console.log(`User ${userId} logged in`);
});

// 接收消息并转发给指定用户
socket.on('private_message', ({ from, to, message }) => {
    const toSocketId = users[to];
    if (toSocketId) {
        io.to(toSocketId).emit('message', { from, message });
        console.log(`Message sent from ${from} to ${to}: ${message}`);
    } else {
        console.log(`User ${to} is not online`);
    }
});

// 当客户端断开连接时触发
socket.on('disconnect', () => {
    console.log('A user disconnected:', socket.id);
});

});

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

3. 创建客户端代码

以下是客户端的代码示例:

html
<!-- client.html -->
</p>



    
    
    <title>Socket.IO Client</title>
    


    <h1>Socket.IO Client</h1>
    
    <button>Login</button>
    <br><br>
    
    
    <button>Send Message</button>
    <div id="messages"></div>

    
        const socket = io();

        function login() {
            const userId = document.getElementById('userId').value;
            socket.emit('login', userId);
        }

        function sendMessage() {
            const toUserId = document.getElementById('toUserId').value;
            const message = document.getElementById('message').value;
            socket.emit('private_message', { from: userId, to: toUserId, message });
        }

        socket.on('message', ({ from, message }) => {
            const messagesDiv = document.getElementById('messages');
            const newMessage = document.createElement('p');
            newMessage.textContent = `From ${from}: ${message}`;
            messagesDiv.appendChild(newMessage);
        });
    



<p>

方法二:基于纯WebSocket实现一对一通信

如果不想使用Socket.IO,可以直接使用WebSocket API实现一对一通信。

1. 安装依赖

bash
npm install ws

2. 创建服务器端代码

javascript
// server.js
const WebSocket = require('ws');</p>

<p>// 创建WebSocket服务器
const wss = new WebSocket.Server({ port: 3000 });</p>

<p>// 存储用户信息的映射表
const users = {};</p>

<p>wss.on('connection', (ws) => {
    console.log('A user connected');</p>

<pre><code>// 用户登录并绑定ID
ws.on('message', (message) => {
    const data = JSON.parse(message);
    if (data.type === 'login') {
        users[data.userId] = ws;
        console.log(`User ${data.userId} logged in`);
    } else if (data.type === 'private_message') {
        const toWs = users[data.to];
        if (toWs) {
            toWs.send(JSON.stringify({
                type: 'message',
                from: data.from,
                message: data.message
            }));
            console.log(`Message sent from ${data.from} to ${data.to}: ${data.message}`);
        } else {
            console.log(`User ${data.to} is not online`);
        }
    }
});

// 当客户端断开连接时触发
ws.on('close', () => {
    console.log('A user disconnected');
});

});

console.log('WebSocket server is running on port 3000');

3. 创建客户端代码

html
<!-- client.html -->
</p>



    
    
    <title>WebSocket Client</title>


    <h1>WebSocket Client</h1>
    
    <button>Login</button>
    <br><br>
    
    
    <button>Send Message</button>
    <div id="messages"></div>

    
        const ws = new WebSocket('ws://localhost:3000');

        let userId;

        function login() {
            userId = document.getElementById('userId').value;
            ws.send(JSON.stringify({ type: 'login', userId }));
        }

        function sendMessage() {
            const toUserId = document.getElementById('toUserId').value;
            const message = document.getElementById('message').value;
            ws.send(JSON.stringify({ type: 'private_message', from: userId, to: toUserId, message }));
        }

        ws.onmessage = (event) => {
            const data = JSON.parse(event.data);
            if (data.type === 'message') {
                const messagesDiv = document.getElementById('messages');
                const newMessage = document.createElement('p');
                newMessage.textContent = `From ${data.from}: ${data.message}`;
                messagesDiv.appendChild(newMessage);
            }
        };
    



<p>

两种实现Node.js中Socket一对一通信的方法:
1. 使用Socket.IO:适合需要快速开发且功能丰富的场景。
2. 使用纯WebSocket:适合追求轻量级和高性能的场景。

根据实际需求选择合适的方法即可!

(www.nzw6.com)

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!cheeksyu@vip.qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有积分奖励和额外收入!
5.严禁将资源用于任何违法犯罪行为,不得违反国家法律,否则责任自负,一切法律责任与本站无关

源码下载