سعید نوروزی
3 سال پیش توسط سعید نوروزی مطرح شد
0 پاسخ

قطع شدن اتصال کاربر فعلی از سوکت بعد از اتصال کاربر جدید در node.js

سلام و خسته نباشید

من دارم یه برنامه تحت وب با node.js مینویسم که با استفاده از سوکت اطلاعات کاربرها رو نمایش میدم به ادمین

حالا مشکلی که دارم اینه که وقتی یه کاربر جدید میاد وارد برنامه من میشه و به سوکت متصل میشه کاربر قبلی که به سوکت وصل بوده ارتباطش با سوکت قطع میشه و دیگه اطلاعات رو از طریق سوکت دریافت نمیکنه. در حالی که من میخوام هر تعداد کاربر که به سوکت وصل میشن بدون مشکل به شکل هم زمان بتوانند اطلاعات رو دریافت کنند

کد های برنامه مرتبط با کارکرد سوکت

کد سمت سرور فایل app.js

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

// require config file
global.config = require('./modules/config');

let port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

const server = http.createServer(app);

/**
 * START: call socket file 
 */
const io = require('socket.io')(server);
require(`${config.path.sockets}/Socket-v1`)(io);
/**
 * END: call socket file 
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

کد سمت سرور فایل Socket-v1.js که کدهای سوکتم درش قرار داره

const User = require(`${config.path.models}/User`);

module.exports = function (io) {

    const getUsersDataAndEmit = async io => {
        try {
            User.find({}).exec((err, docs) => {
                io.emit("getUsersData", docs);
            });
        } catch (error) {
            console.error(`Error: ${error.code}`);
        }
    };

    let dataInterval
    io.sockets.on("connection", function (socket) {
        console.log('user connected');

        socket.on('getUsersData', () => {
            if (dataInterval) {
                clearInterval(dataInterval);
            }

            dataInterval = setInterval(() => getUsersDataAndEmit(socket), 10000);
        })

        socket.on('disconnect', () => {
            console.log('user disconnected');
        });
    }
};

کد سمت کاربر

<script src="/socket.io/socket.io.js"></script>

let socket = io();

socket.emit('getUsersData');
socket.on('getUsersData', (data) => {
    showUsersData(data)
});

@hesammousavi
@mhyeganeh


ثبت پرسش جدید

به همدیگه کمک کنیم

به سعید نوروزی کمک کنید تا مشکل خودش را حل کند؛ این‌طور می‌توانیم با هم پیشرفت کنیم.

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام