消息推送系统

我们提供消息推送系统招投标所需全套资料,包括消息推送系统介绍PPT、消息推送系统产品解决方案、
消息推送系统产品技术参数,以及对应的标书参考文件,详请联系客服。

构建高效统一消息推送与登录系统

2025-05-10 03:51
消息推送平台在线试用
消息推送平台
在线试用
消息推送平台解决方案
消息推送平台
解决方案下载
消息推送平台源码
消息推送平台
详细介绍
消息推送平台报价
消息推送平台
产品报价

在现代互联网应用中,统一的消息推送和用户登录功能是提升用户体验的重要组成部分。本文将通过一个简单的例子展示如何使用WebSocket进行实时消息推送,并结合JSON Web Token(JWT)实现安全的用户登录。

 

### 系统架构概述

- 前端:React.js

- 后端:Node.js + Express

- 数据库:MongoDB

 

### 后端代码实现

 

首先,安装必要的依赖:

        npm install express ws jsonwebtoken mongoose bcryptjs
        

 

创建`server.js`文件:

消息推送平台

        const express = require('express');
        const http = require('http');
        const WebSocket = require('ws');
        const jwt = require('jsonwebtoken');
        const mongoose = require('mongoose');
        const bcrypt = require('bcryptjs');

        const app = express();
        const server = http.createServer(app);
        const wss = new WebSocket.Server({ server });

        // 连接数据库
        mongoose.connect('mongodb://localhost:27017/myapp', { useNewUrlParser: true, useUnifiedTopology: true });

        // 用户模型
        const UserSchema = new mongoose.Schema({
            username: String,
            password: String
        });
        const User = mongoose.model('User', UserSchema);

        // 生成JWT
        function generateToken(user) {
            return jwt.sign({ id: user._id }, 'secret_key', { expiresIn: '1h' });
        }

        // 登录接口
        app.post('/login', async (req, res) => {
            const { username, password } = req.body;
            const user = await User.findOne({ username });
            if (!user || !await bcrypt.compare(password, user.password)) {
                return res.status(401).send('Invalid credentials');
            }
            const token = generateToken(user);
            res.json({ token });
        });

        // WebSocket连接处理
        wss.on('connection', async (ws) => {
            ws.on('message', async (message) => {
                const data = JSON.parse(message);
                if (data.type === 'subscribe') {
                    ws.subscribeId = data.userId;
                    console.log(`User ${data.userId} connected.`);
                }
            });

            ws.on('close', () => {
                console.log(`User ${ws.subscribeId} disconnected.`);
            });
        });

        // 消息推送
        setInterval(() => {
            wss.clients.forEach(client => {
                if (client.readyState === WebSocket.OPEN && client.subscribeId) {
                    client.send(JSON.stringify({ message: 'Hello World!' }));
                }
            });
        }, 5000);

        server.listen(3000, () => {
            console.log('Server started on port 3000');
        });
        

统一消息推送

 

### 前端代码实现

 

使用React创建一个简单的登录页面:

        import React, { useState } from 'react';
        import axios from 'axios';

        function App() {
            const [username, setUsername] = useState('');
            const [password, setPassword] = useState('');

            const handleLogin = async () => {
                try {
                    const response = await axios.post('http://localhost:3000/login', {
                        username,
                        password
                    });
                    console.log(response.data.token);
                } catch (error) {
                    console.error(error);
                }
            };

            return (
                
setUsername(e.target.value)} placeholder="Username" /> setPassword(e.target.value)} placeholder="Password" />
); } export default App;

 

### 总结

本系统展示了如何通过WebSocket实现消息推送,并利用JWT确保用户身份的安全性。这是一套轻量级且高效的解决方案,适合中小型项目。

]]>

本站部分内容及素材来源于互联网,由AI智能生成,如有侵权或言论不当,联系必删!