راکت

قطع شدن اتصال کاربر فعلی از سوکت بعد از اتصال کاربر جدید در 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

ثبت پرسش جدید

پاسخ‌ها

0

هنوز پاسخی ثبت نشده

اولین نفری باشید که به این پرسش کمک می‌کند و مسیر حل مشکل را باز می‌کند.

اولین پاسخ را بنویسید

شاید پاسخ شما همین‌جا باشد

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

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