O'zbek

Socket.IO yordamida real vaqtda ma'lumotlar oqimini o'rganing, sozlash, amalga oshirish, kengaytirish va global ilovalar uchun eng yaxshi amaliyotlarni o'z ichiga oladi.

Real-time Rejimida Ma'lumotlar Oqimi: Socket.IO'ni Jjoriy Qilish Qo'llanmasi

Bugungi tez sur'atli raqamli dunyoda, real-time rejimida ma'lumotlar oqimi bir lahzada yangilanishlar va uzluksiz aloqani talab qiladigan ilovalar uchun juda muhimdir. Jonli chat ilovalaridan tortib real-time tahliliy asboblar panellarigacha, ma'lumotlarni bir zumda uzatish qobiliyati foydalanuvchi tajribasini yaxshilaydi va raqobatbardosh ustunlikni ta'minlaydi. Socket.IO, mashhur JavaScript kutubxonasi, veb-klientlar va serverlar o'rtasida real-time rejimida ikki tomonlama aloqani amalga oshirishni soddalashtiradi. Ushbu keng qamrovli qo'llanma sizga Socket.IO yordamida real-time ma'lumotlar oqimini sozlash va amalga oshirish jarayonida yordam beradi, muhim tushunchalar, amaliy misollar va global ilovalar uchun eng yaxshi amaliyotlarni qamrab oladi.

Real-time Rejimida Ma'lumotlar Oqimi Nima?

Real-time rejimida ma'lumotlar oqimi ma'lumotlarni manbadan manzilga sezilarli kechikishsiz, uzluksiz va bir zumda uzatishni o'z ichiga oladi. Klientlar yangilanishlarni qayta-qayta so'rashi kerak bo'lgan an'anaviy so'rov-javob modellaridan farqli o'laroq, real-time oqimi serverlarga ma'lumotlar paydo bo'lishi bilan ularni klientlarga yuborish imkonini beradi. Ushbu yondashuv eng so'nggi ma'lumotlarni talab qiladigan ilovalar uchun zarurdir, masalan:

Real-time rejimida ma'lumotlar oqimining afzalliklari quyidagilardan iborat:

Socket.IO bilan tanishuv

Socket.IO veb-klientlar va serverlar o'rtasida real-time, ikki tomonlama va hodisalarga asoslangan aloqani ta'minlaydigan JavaScript kutubxonasidir. U WebSockets kabi asosiy transport protokollarining murakkabliklarini abstraktlashtiradi va real-time ilovalarini yaratish uchun oddiy va intuitiv API taqdim etadi. Socket.IO klient va server o'rtasida doimiy aloqa o'rnatish orqali ishlaydi, bu esa har ikki tomonga real-time rejimida ma'lumotlarni yuborish va qabul qilish imkonini beradi.

Socket.IO'ning asosiy xususiyatlari quyidagilardan iborat:

Socket.IO Loyihasini Sozlash

Socket.IO bilan ishlashni boshlash uchun sizga Node.js va npm (Node Package Manager) tizimingizda o'rnatilgan bo'lishi kerak. Asosiy Socket.IO loyihasini sozlash uchun quyidagi amallarni bajaring:

1. Loyiha Direktoriyasini Yaratish

Loyihangiz uchun yangi direktoriya yarating va unga o'ting:

mkdir socketio-example
cd socketio-example

2. Node.js Loyihasini Initsializatsiya Qilish

npm yordamida yangi Node.js loyihasini initsializatsiya qiling:

npm init -y

3. Socket.IO va Express'ni O'rnatish

Socket.IO va mashhur Node.js veb-freymvorki bo'lgan Express'ni bog'liqlik sifatida o'rnating:

npm install socket.io express

4. Server Tomonidagi Kodni Yaratish (index.js)

`index.js` nomli fayl yarating va quyidagi kodni qo'shing:

const express = require('express');
const http = require('http');
const { Server } = require("socket.io");

const app = express();
const server = http.createServer(app);
const io = new Server(server);

const port = 3000;

app.get('/', (req, res) => {
 res.sendFile(__dirname + '/index.html');
});

io.on('connection', (socket) => {
 console.log('Foydalanuvchi ulandi');

 socket.on('disconnect', () => {
 console.log('Foydalanuvchi uzildi');
 });

 socket.on('chat message', (msg) => {
 io.emit('chat message', msg); // Xabarni barcha ulangan klientlarga efirga uzatish
 console.log('xabar: ' + msg);
 });
});

server.listen(port, () => {
 console.log(`Server ${port} portida ishlamoqda`);
});

Ushbu kod Express serverini sozlaydi va Socket.IO'ni integratsiya qiladi. U kiruvchi ulanishlarni tinglaydi va 'connection', 'disconnect' va 'chat message' kabi hodisalarni boshqaradi.

5. Klient Tomonidagi Kodni Yaratish (index.html)

Xuddi shu direktoriyada `index.html` nomli fayl yarating va quyidagi kodni qo'shing:




 Socket.IO Chat
 


 

    Ushbu HTML fayli xabarlarni yuborish uchun kiritish maydoni va qabul qilingan xabarlarni ko'rsatish uchun ro'yxat bilan asosiy chat interfeysini sozlaydi. Shuningdek, u Socket.IO klient kutubxonasini va xabarlarni yuborish va qabul qilishni boshqarish uchun JavaScript kodini o'z ichiga oladi.

    6. Ilovani Ishga Tushirish

    Terminalingizda quyidagi buyruqni ishga tushirib, Node.js serverini ishga tushiring:

    node index.js

    Veb-brauzeringizni oching va `http://localhost:3000` manziliga o'ting. Siz chat interfeysini ko'rishingiz kerak. Bir nechta foydalanuvchini simulyatsiya qilish uchun bir nechta brauzer oynalari yoki yorliqlarini oching. Bir oynada xabar yozing va Enter tugmasini bosing; siz xabarning barcha ochiq oynalarda real-time rejimida paydo bo'lganini ko'rishingiz kerak.

    Socket.IO'ning Asosiy Tushunchalari

    Mustahkam va kengaytiriladigan real-time ilovalarini yaratish uchun Socket.IO'ning asosiy tushunchalarini tushunish muhimdir.

    1. Ulanishlar

    Ulanish klient va server o'rtasidagi doimiy aloqani ifodalaydi. Klient Socket.IO yordamida serverga ulanganda, ham klientda, ham serverda noyob soket ob'ekti yaratiladi. Ushbu soket ob'ekti bir-biri bilan aloqa qilish uchun ishlatiladi.

    // Server tomoni
    io.on('connection', (socket) => {
     console.log('Foydalanuvchi ulandi, soket IDsi: ' + socket.id);
    
     socket.on('disconnect', () => {
     console.log('Foydalanuvchi uzildi');
     });
    });
    
    // Klient tomoni
    var socket = io();

    2. Hodisalar

    Hodisalar klientlar va server o'rtasida ma'lumotlar almashishning asosiy mexanizmidir. Socket.IO hodisalarga asoslangan API'dan foydalanadi, bu sizga maxsus hodisalarni aniqlash va ularni ma'lum harakatlar bilan bog'lash imkonini beradi. Klientlar serverga hodisalar yuborishi mumkin, va server klientlarga hodisalar yuborishi mumkin.

    // Server tomoni
    io.on('connection', (socket) => {
     socket.on('custom event', (data) => {
     console.log('Qabul qilingan ma\'lumotlar:', data);
     socket.emit('response event', { message: 'Ma\'lumotlar qabul qilindi' });
     });
    });
    
    // Klient tomoni
    socket.emit('custom event', { message: 'Klientdan salom' });
    
    socket.on('response event', (data) => {
     console.log('Qabul qilingan javob:', data);
    });

    3. Efirga Uzatish

    Efirga uzatish sizga bir vaqtning o'zida bir nechta ulangan klientlarga ma'lumotlarni yuborish imkonini beradi. Socket.IO turli xil efirga uzatish imkoniyatlarini taqdim etadi, masalan, barcha ulangan klientlarga ma'lumotlarni yuborish, ma'lum bir xonadagi klientlarga ma'lumotlarni yuborish yoki yuboruvchidan tashqari barcha klientlarga ma'lumotlarni yuborish.

    // Server tomoni
    io.on('connection', (socket) => {
     socket.on('new message', (msg) => {
     // Barcha ulangan klientlarga efirga uzatish
     io.emit('new message', msg);
    
     // Yuboruvchidan tashqari barcha klientlarga efirga uzatish
     socket.broadcast.emit('new message', msg);
     });
    });

    4. Xonalar

    Xonalar klientlarni bir guruhga to'plash va ma'lumotlarni faqat ma'lum bir xonadagi klientlarga yuborish usulidir. Bu chat xonalari yoki onlayn o'yin seanslari kabi ma'lum foydalanuvchilar guruhlarini nishonga olish kerak bo'lgan holatlar uchun foydalidir. Klientlar xonalarga dinamik ravishda qo'shilishi yoki ularni tark etishi mumkin.

    // Server tomoni
    io.on('connection', (socket) => {
     socket.on('join room', (room) => {
     socket.join(room);
     console.log(`Foydalanuvchi ${socket.id} ${room} xonasiga qo'shildi`);
    
     // Xonadagi barcha klientlarga xabar yuborish
     io.to(room).emit('new user joined', `Foydalanuvchi ${socket.id} xonaga qo'shildi`);
     });
    
     socket.on('send message', (data) => {
     // Xabarni xonadagi barcha klientlarga yuborish
     io.to(data.room).emit('new message', data.message);
     });
    
     socket.on('leave room', (room) => {
     socket.leave(room);
     console.log(`Foydalanuvchi ${socket.id} ${room} xonasini tark etdi`);
     });
    });
    
    // Klient tomoni
    socket.emit('join room', 'room1');
    socket.emit('send message', { room: 'room1', message: 'room1 dan salom' });
    
    socket.on('new message', (message) => {
     console.log('Qabul qilingan xabar:', message);
    });

    5. Nomlar fazosi

    Nomlar fazosi (Namespaces) sizga bir nechta maqsadlar uchun yagona TCP ulanishini multiplekslash imkonini beradi, bu esa dastur mantig'ingizni yagona umumiy ulanish orqali bo'lishga yordam beradi. Ularni bitta jismoniy soket ichidagi alohida virtual "soketlar" deb tasavvur qiling. Siz chat ilovasi uchun bir nomlar fazosidan va o'yin uchun boshqasidan foydalanishingiz mumkin. Bu aloqa kanallarini tartibli va kengaytiriladigan saqlashga yordam beradi.

    //Server tomoni
    const chatNsp = io.of('/chat');
    
    chatNsp.on('connection', (socket) => {
     console.log('kimdir chatga ulandi');
     // ... sizning chat hodisalaringiz ...
    });
    
    const gameNsp = io.of('/game');
    
    gameNsp.on('connection', (socket) => {
     console.log('kimdir o\'yinga ulandi');
     // ... sizning o\'yin hodisalaringiz ...
    });
    
    //Klient tomoni
    const chatSocket = io('/chat');
    const gameSocket = io('/game');
    
    chatSocket.emit('chat message', 'Chatdan salom!');
    gameSocket.emit('game action', 'O\'yinchi harakatlandi!');

    Socket.IO Yordamida Real-time Funksiyalarini Amalga Oshirish

    Keling, Socket.IO yordamida ba'zi umumiy real-time funksiyalarini qanday amalga oshirishni ko'rib chiqamiz.

    1. Real-time Chat Ilovasini Yaratish

    Biz avvalroq yaratgan asosiy chat ilovasi real-time chatning asosiy tamoyillarini namoyish etadi. Uni yaxshilash uchun siz quyidagi xususiyatlarni qo'shishingiz mumkin:

    Mana yozish ko'rsatkichlarini qo'shishga misol:

    // Server tomoni
    io.on('connection', (socket) => {
     socket.on('typing', (username) => {
     // Yuboruvchidan tashqari barcha klientlarga efirga uzatish
     socket.broadcast.emit('typing', username);
     });
    
     socket.on('stop typing', (username) => {
     // Yuboruvchidan tashqari barcha klientlarga efirga uzatish
     socket.broadcast.emit('stop typing', username);
     });
    });
    
    // Klient tomoni
    input.addEventListener('input', () => {
     socket.emit('typing', username);
    });
    
    input.addEventListener('blur', () => {
     socket.emit('stop typing', username);
    });
    
    socket.on('typing', (username) => {
     typingIndicator.textContent = `${username} yozmoqda...`;
    });
    
    socket.on('stop typing', () => {
     typingIndicator.textContent = '';
    });

    2. Real-time Tahliliy Asboblar Panelini Yaratish

    Real-time tahliliy asboblar panellari eng so'nggi metrikalar va tendentsiyalarni ko'rsatadi, bu esa biznes samaradorligi haqida qimmatli ma'lumotlarni taqdim etadi. Siz Socket.IO yordamida ma'lumotlar manbasidan asboblar paneliga real-time rejimida ma'lumotlarni oqimlash uchun foydalanishingiz mumkin.

    Mana soddalashtirilgan misol:

    // Server tomoni
    const data = {
     pageViews: 1234,
     usersOnline: 567,
     conversionRate: 0.05
    };
    
    setInterval(() => {
     data.pageViews += Math.floor(Math.random() * 10);
     data.usersOnline += Math.floor(Math.random() * 5);
     data.conversionRate = Math.random() * 0.1;
    
     io.emit('dashboard update', data);
    }, 2000); // Har 2 soniyada ma'lumotlarni efirga uzatish
    
    // Klient tomoni
    socket.on('dashboard update', (data) => {
     document.getElementById('pageViews').textContent = data.pageViews;
     document.getElementById('usersOnline').textContent = data.usersOnline;
     document.getElementById('conversionRate').textContent = data.conversionRate.toFixed(2);
    });

    3. Hamkorlikda Tahrirlash Asbobini Ishlab Chiqish

    Hamkorlikda tahrirlash asboblari bir nechta foydalanuvchiga bir vaqtning o'zida hujjatlar yoki kodlarni tahrirlash imkonini beradi. Socket.IO foydalanuvchilar o'rtasidagi o'zgarishlarni real-time rejimida sinxronlashtirish uchun ishlatilishi mumkin.

    Mana asosiy misol:

    // Server tomoni
    io.on('connection', (socket) => {
     socket.on('text change', (data) => {
     // O'zgarishlarni bir xonadagi barcha boshqa klientlarga efirga uzatish
     socket.broadcast.to(data.room).emit('text change', data.text);
     });
    });
    
    // Klient tomoni
    textarea.addEventListener('input', () => {
     socket.emit('text change', { room: roomId, text: textarea.value });
    });
    
    socket.on('text change', (text) => {
     textarea.value = text;
    });

    Socket.IO Ilovalarini Masshtablash

    Sizning Socket.IO ilovangiz o'sib borar ekan, siz masshtablashni hisobga olishingiz kerak bo'ladi. Socket.IO masshtablash uchun mo'ljallangan, ammo ko'p sonli bir vaqtda ulanishlarni boshqarish uchun siz ma'lum strategiyalarni amalga oshirishingiz kerak bo'ladi.

    1. Gorizontal Masshtablash

    Gorizontal masshtablash ilovangizni bir nechta serverlarga taqsimlashni o'z ichiga oladi. Bunga kiruvchi ulanishlarni mavjud serverlar o'rtasida taqsimlash uchun yuklama muvozanatlagich (load balancer) yordamida erishish mumkin. Biroq, Socket.IO bilan siz klientlarning ulanish muddati davomida doimiy ravishda bir xil serverga yo'naltirilishini ta'minlashingiz kerak. Buning sababi, Socket.IO ulanish holatini saqlash uchun xotiradagi ma'lumotlar tuzilmalariga tayanadi. Odatda yopishqoq seanslar/seans yaqinligidan (sticky sessions/session affinity) foydalanish kerak.

    2. Redis Adapteri

    Socket.IO Redis adapteri sizga bir nechta Socket.IO serverlari o'rtasida hodisalarni bo'lishish imkonini beradi. U barcha ulangan serverlar bo'ylab hodisalarni efirga uzatish uchun xotiradagi ma'lumotlar ombori bo'lgan Redisdan foydalanadi. Bu sizga ilovangizni ulanish holatini yo'qotmasdan gorizontal ravishda masshtablash imkonini beradi.

    // Server tomoni
    const { createAdapter } = require('@socket.io/redis-adapter');
    const { createClient } = require('redis');
    
    const pubClient = createClient({ host: 'localhost', port: 6379 });
    const subClient = pubClient.duplicate();
    
    Promise.all([pubClient.connect(), subClient.connect()]).then(() => {
     io.adapter(createAdapter(pubClient, subClient));
     io.listen(3000);
    });

    3. Yuklama Muvozanatlash

    Yuklama muvozanatlagich bir nechta Socket.IO serverlari o'rtasida trafikni taqsimlash uchun juda muhimdir. Umumiy yuklama muvozanatlash yechimlari orasida Nginx, HAProxy va AWS Elastic Load Balancing yoki Google Cloud Load Balancing kabi bulutga asoslangan yuklama muvozanatlagichlar mavjud. Klientlarning doimiy ravishda bir xil serverga yo'naltirilishini ta'minlash uchun yuklama muvozanatlagichingizni yopishqoq seanslardan foydalanish uchun sozlang.

    4. Vertikal Masshtablash

    Vertikal masshtablash bitta serverning resurslarini (CPU, xotira) oshirishni o'z ichiga oladi. Bu gorizontal masshtablashga qaraganda amalga oshirish osonroq bo'lsa-da, uning cheklovlari bor. Oxir-oqibat, siz bitta serverning resurslarini endi oshira olmaydigan nuqtaga yetasiz.

    5. Kodni Optimallashtirish

    Samarali kod yozish Socket.IO ilovangizning ishlashini sezilarli darajada yaxshilashi mumkin. Keraksiz hisob-kitoblardan saqlaning, ma'lumotlar uzatishni minimallashtiring va ma'lumotlar bazasi so'rovlaringizni optimallashtiring. Profiling vositalari sizga ishlashdagi zaif nuqtalarni aniqlashga yordam beradi.

    Socket.IO'ni Jjoriy Qilish uchun Eng Yaxshi Amaliyotlar

    Socket.IO loyihangizning muvaffaqiyatini ta'minlash uchun ushbu eng yaxshi amaliyotlarni ko'rib chiqing:

    1. Ulanishlaringizni Himoyalash

    Klientlar va server o'rtasidagi aloqani shifrlash uchun xavfsiz WebSockets (WSS) dan foydalaning. Bu maxfiy ma'lumotlarni tinglash va o'zgartirishdan himoya qiladi. Domeningiz uchun SSL sertifikatini oling va serveringizni WSSdan foydalanish uchun sozlang.

    2. Autentifikatsiya va Avtorizatsiyani Amalga Oshirish

    Foydalanuvchilarning shaxsini tekshirish uchun autentifikatsiyani va resurslarga kirishni nazorat qilish uchun avtorizatsiyani amalga oshiring. Bu ruxsatsiz kirishni oldini oladi va ilovangizni zararli hujumlardan himoya qiladi. JWT (JSON Web Tokens) yoki OAuth kabi o'rnatilgan autentifikatsiya mexanizmlaridan foydalaning.

    3. Xatolarni To'g'ri Boshqarish

    Kutilmagan xatolarni to'g'ri boshqarish va ilovaning ishdan chiqishini oldini olish uchun to'g'ri xatolarni boshqarishni amalga oshiring. Xatolarni nosozliklarni tuzatish va monitoring qilish uchun qayd qiling. Foydalanuvchilarga ma'lumot beruvchi xato xabarlarini taqdim eting.

    4. Yurak Urishi Mexanizmidan Foydalanish

    Socket.IO'da o'rnatilgan yurak urishi mexanizmi mavjud, ammo siz uni to'g'ri sozlashingiz kerak. O'lik ulanishlarni aniqlash va boshqarish uchun oqilona ping oralig'i va ping vaqtini belgilang. Xotira sizib chiqishini oldini olish uchun uzilgan klientlar bilan bog'liq resurslarni tozalang.

    5. Ishlashni Nazorat Qilish

    Mumkin bo'lgan muammolarni aniqlash va ishlashni optimallashtirish uchun Socket.IO ilovangizning ishlashini nazorat qiling. Ulanishlar soni, xabar kechikishi va CPUdan foydalanish kabi metrikalarni kuzatib boring. Prometheus, Grafana yoki New Relic kabi monitoring vositalaridan foydalaning.

    6. Foydalanuvchi Kiritishlarini Tozalash

    Saytlararo skripting (XSS) hujumlari va boshqa xavfsizlik zaifliklarini oldini olish uchun har doim foydalanuvchi kiritishlarini tozalang. Brauzerda ko'rsatishdan oldin foydalanuvchi tomonidan taqdim etilgan ma'lumotlarni kodlang. Ma'lumotlarning kutilgan formatlarga mos kelishini ta'minlash uchun kiritishni tekshirishdan foydalaning.

    7. Tezlikni Cheklash

    Ilovangizni suiiste'mol qilishdan himoya qilish uchun tezlikni cheklashni amalga oshiring. Foydalanuvchi ma'lum bir vaqt oralig'ida qila oladigan so'rovlar sonini cheklang. Bu xizmat ko'rsatishni rad etish (DoS) hujumlarining oldini oladi va server resurslaringizni himoya qiladi.

    8. Siqish

    Klientlar va server o'rtasida uzatiladigan ma'lumotlar hajmini kamaytirish uchun siqishni yoqing. Bu, ayniqsa, katta hajmdagi ma'lumotlarni uzatadigan ilovalar uchun ishlashni sezilarli darajada yaxshilashi mumkin. Socket.IO `compression` middleware yordamida siqishni qo'llab-quvvatlaydi.

    9. To'g'ri Transportni Tanlash

    Socket.IO sukut bo'yicha WebSockets'dan foydalanadi, lekin WebSockets mavjud bo'lmasa, boshqa usullarga (masalan, HTTP long polling) o'tadi. Socket.IO buni avtomatik ravishda boshqarsa-da, oqibatlarini tushunish kerak. WebSockets odatda eng samarali hisoblanadi. WebSockets ko'pincha bloklanadigan muhitlarda (ba'zi korporativ tarmoqlar, cheklovchi fayrvollar), siz alternativ konfiguratsiyalar yoki arxitekturalarni ko'rib chiqishingiz kerak bo'lishi mumkin.

    10. Global Mulohazalar: Mahalliylashtirish va Vaqt Mintaqalari

    Global auditoriya uchun ilovalar yaratayotganda, mahalliylashtirishga e'tibor bering. Raqamlar, sanalar va valyutalarni foydalanuvchining lokaliga muvofiq formatlang. Hodisalarning foydalanuvchining mahalliy vaqtida ko'rsatilishini ta'minlash uchun vaqt mintaqalarini to'g'ri boshqaring. Ilovangizni mahalliylashtirish jarayonini soddalashtirish uchun xalqarolashtirish (i18n) kutubxonalaridan foydalaning.

    Misol: Vaqt Mintaqasini Boshqarish

    Aytaylik, serveringiz hodisa vaqtlarini UTCda saqlaydi. Siz hodisa vaqtini foydalanuvchining mahalliy vaqt mintaqasida ko'rsatish uchun `moment-timezone` kabi kutubxonadan foydalanishingiz mumkin.

    // Server tomoni (hodisa vaqtini UTCda yuborish)
    const moment = require('moment');
    
    io.on('connection', (socket) => {
     socket.on('request event', () => {
     const eventTimeUTC = moment.utc(); // Hozirgi vaqt UTCda
     socket.emit('event details', {
     timeUTC: eventTimeUTC.toISOString(),
     description: 'Global konferensiya qo\'ng\'irog\'i'
     });
     });
    });
    
    // Klient tomoni (foydalanuvchining mahalliy vaqtida ko'rsatish)
    const moment = require('moment-timezone');
    
    socket.on('event details', (data) => {
     const eventTimeLocal = moment.utc(data.timeUTC).tz(moment.tz.guess()); // Foydalanuvchining vaqt mintaqasiga o'zgartirish
     document.getElementById('eventTime').textContent = eventTimeLocal.format('MMMM Do YYYY, h:mm:ss a z');
    });

    Misol: Valyutani Formatlash

    Valyuta qiymatlarini to'g'ri ko'rsatish uchun, foydalanuvchining lokaliga muvofiq valyutani formatlash uchun `Intl.NumberFormat` kabi kutubxonadan foydalaning.

    // Klient tomoni
    const priceUSD = 1234.56;
    const userLocale = navigator.language || 'en-US'; // Foydalanuvchining lokalini aniqlash
    
    const formatter = new Intl.NumberFormat(userLocale, {
     style: 'currency',
     currency: 'USD', // Boshlang'ich nuqta sifatida USD dan foydalaning, kerak bo'lganda sozlang
    });
    
    const formattedPrice = formatter.format(priceUSD);
    
    document.getElementById('price').textContent = formattedPrice;
    
    // Narxlarni boshqa valyutada ko'rsatish uchun:
    const formatterEUR = new Intl.NumberFormat(userLocale, {
     style: 'currency',
     currency: 'EUR',
    });
    
    const priceEUR = 1100.00;
    const formattedPriceEUR = formatterEUR.format(priceEUR);
    
    document.getElementById('priceEUR').textContent = formattedPriceEUR;

    Xulosa

    Socket.IO veb-ilovalarida real-time rejimida ma'lumotlar oqimini amalga oshirishni soddalashtiradi. Socket.IO'ning asosiy tushunchalarini tushunish, eng yaxshi amaliyotlarni qo'llash va ilovangizni to'g'ri masshtablash orqali siz bugungi raqamli dunyo talablariga javob beradigan mustahkam va kengaytiriladigan real-time ilovalarini yaratishingiz mumkin. Chat ilovasi, real-time tahliliy asboblar paneli yoki hamkorlikda tahrirlash asbobini yaratayotgan bo'lsangiz ham, Socket.IO sizga global auditoriya uchun jozibali va sezgir foydalanuvchi tajribalarini yaratish uchun kerakli vositalar va moslashuvchanlikni taqdim etadi.