WebSocket nədir? Necə istifadə olunur? Üstünlükləri nələrdir? AJAX və Axios ilə arasındakı fərqlər nələrdir?
WebSocket, bir çox müasir web brauzerlər və server platformaları tərəfindən dəstəklənən bir rabitə protokoludur. Bu protokol, bir web brauzeri ilə server arasında ikitərəfli rabitə yaratmağa imkan verir. Ənənəvi HTTP protokolu müştəridən serverə olan sorğularda "sorğu-cavab" modelindən istifadə edərkən, WebSocket ilə server də məlumatları müştəriyə göndərə bilir. Bu, real vaxt tətbiqləri və interaktiv veb saytlarını dəstəkləmək üçün olduqca vacibdir.
WebSocket, müştəri və server arasında ikitərəfli rabitə təmin edir. Buna görə də, WebSocket texnologiyası müştəri və server arasında işləyir. Lakin, server tərəfində WebSocket dəstəyi olmalıdır. Müştəri və server arasında bir əlaqə qurulduqda, hər iki tərəf məlumat göndərə və qəbul edə bilər. Nəticə etibarı ilə, WebSocket istifadə edərək real vaxt rabitəsi yaratmaq üçün həm müştəri, həm də server tərəfində uyğun proqram kodları olmalıdır. Məsələn, bir web brauzeri müştəri tərəfində WebSocket-dən istifadə edə bilər, bir web serveri isə server tərəfində WebSocket əlaqələrini qəbul edə və emal edə bilər. Bu şəkildə, WebSocket istifadə edərək real vaxt rabitəsini təmin edir.
WebSocket-in əsas xüsusiyyətləri bunlardır:
Tam İkitərəfli Rabitə: Bağlantı qurulduqdan sonra həm müştəri, həm də server bir-birinə məlumat göndərə bilər.
Aşağı Gecikmə: WebSocket, HTTP kimi lazımsız əlavə başlıq məlumatları olmadan birbaşa məlumat mübadiləsi edir, bu da daha aşağı gecikmə ilə nəticələnir.
Tək Bağlantı: Birdən çox məlumat mübadiləsi üçün tək bir bağlantı istifadə edilə bilər, bu da lazımsız bağlantı qurma məsrəflərini azaldır.
Protokol Genişlənməsi: WebSocket, protokol uzantıları istifadə edərək fərdiləşdirilə və genişləndirilə bilər.
WebSocket, veb əsaslı tətbiqlərdə real vaxt rabitəsi tələb edən bir sıra ssenarilərdə istifadə olunur. Canlı söhbət tətbiqləri, onlayn oyunlar, maliyyə tətbiqləri və real vaxt analitikası kimi tətbiqlər üçün idealdır.
WebSocket-in istifadə ssenarilərindən bəziləri:
-
Canlı Söhbət Tətbiqləri: WebSocket, istifadəçilərin real vaxtda ünsiyyət qura biləcəyi canlı söhbət tətbiqləri üçün idealdır. Mesajların sürətli göndərilməsi və qəbul edilməsi istifadəçi təcrübəsini artırır.
-
Real Vaxt Oyunları: Çox oyunçulu onlayn oyunlar oyunçular arasında sürətli və davamlı məlumat mübadiləsi tələb edir. WebSocket, bu cür oyunlarda istifadəçi qarşılıqlı əlaqələrini real vaxtda emal etmək üçün idealdır.
-
Maliyyə Tətbiqləri: Səhm, kripto valyuta və digər maliyyə aktivlərinin qiymətləri tez dəyişir. Maliyyə tətbiqləri WebSocket-dən istifadə edərək bazar məlumatlarını real vaxtda izləyə və istifadəçilərə ani bildirişlər göndərə bilər.
-
Real Vaxt Analitikası: WebSocket böyük məlumat emalı və real vaxt analitikası üçün istifadə edilə bilər. Məsələn, bir axın məlumatı analizi tətbiqi gələn məlumatları ani şəkildə emal edə və nəticələri istifadəçilərə göstərə bilər.
-
Uzaqdan Nəzarət və Monitorinq: IoT cihazları və sənaye nəzarət sistemləri kimi tətbiqlərdə WebSocket cihazlarla davamlı ünsiyyət və status monitorinqi üçün istifadə edilə bilər.
-
Sürükləyib Buraxma Fayl Yükləmə: WebSocket, sürükləyib buraxma üsulu ilə fayl yükləmə proseslərini real vaxtda izləmək və irəliləyişi istifadəçilərə göstərmək üçün istifadə edilə bilər.
Bu ssenarilər WebSocket-in yalnız bir neçə nümunəsidir və bu texnologiya müxtəlif sahələrdə real vaxt rabitəsi tələb edən bir çox fərqli tətbiq üçün uyğun bir həlldir.
WebSocket, AJAX və Axios Müqayisəsi
WebSocket, AJAX və Axios kimi digər HTTP əsaslı rabitə üsullarından fərqli bir rabitə protokoludur və fərqli istifadə ssenarilərinə malikdir. WebSocket-in AJAX və Axios ilə müqayisəsi:
Yaxınlıq və Real Vaxt Rabitəsi:
-
WebSocket: Real vaxt rabitəsi üçün idealdır. Server və müştəri arasında davamlı və ikitərəfli rabitə təmin edir. Bu, canlı söhbət tətbiqləri, real vaxt oyunları kimi ssenarilərdə istifadə edilə bilər.
-
AJAX və Axios: AJAX və Axios kimi HTTP əsaslı texnologiyalar serverlə tək istiqamətli rabitə təmin edir. Müştəri serverə sorğu göndərir və cavab alır. Bu, səhifəni yeniləmədən məlumat mübadiləsi etmək üçün faydalıdır, lakin real vaxt rabitəsi üçün WebSocket qədər uyğun deyil.
Məlumat Trafiki:
-
WebSocket: Bağlantı qurulduqdan sonra lazımsız başlıq məlumatı olmadan məlumat göndərir və qəbul edir. Bu, daha aşağı məlumat trafiki və daha aşağı gecikmə ilə nəticələnir.
-
AJAX və Axios: HTTP əsaslı rabitə hər sorğu üçün başlıq məlumatı əlavə edir. Bu, artan məlumat trafikinə və daha yüksək gecikməyə səbəb ola bilər.
Bağlantı İdarəetməsi:
-
WebSocket: Tək bir bağlantı üzərindən davamlı rabitə təmin edir. Bağlantı bir dəfə qurulduqda, müştəri və server arasında məlumat mübadiləsi üçün təkrar-təkrar bağlantı qurmağa ehtiyac yoxdur.
-
AJAX və Axios: Hər sorğu üçün ayrı bir HTTP sorğusu etmək tələb olunduğundan bağlantı idarəetməsi daha mürəkkəbdir. Bu, lazımsız bağlantı xərclərinə səbəb ola bilər.
Dəstəklənən Platformalar:
-
WebSocket: Müasir veb brauzerlər və server platformaları tərəfindən dəstəklənir. Lakin bəzi köhnə brauzerlər və server platformaları WebSocket-i dəstəkləmir.
-
AJAX və Axios: Demək olar ki, bütün veb brauzerlər və server platformaları tərəfindən dəstəklənir, bu da daha geniş uyğunluq təmin edir.
Nəticə etibarı ilə, WebSocket real vaxt rabitəsi tələb edən tətbiqlər üçün idealdır, lakin HTTP əsaslı texnologiyalarla müqayisədə daha spesifik bir istifadə sahəsinə malikdir. AJAX və Axios kimi HTTP əsaslı texnologiyalar ümumi məqsədli məlumat mübadiləsi üçün daha geniş istifadə olunur.
Nümunə İstifadə
Bu nümunə JavaScript müştərisindən WebSocket serverinə qoşulmağı və mesajları göndərib qəbul etməyi nümayiş etdirir. Bu nümunədə Node.js istifadə edərək sadə bir WebSocket serveri yaradacağıq və sonra bir HTML faylında JavaScript istifadə edərək bu serverə qoşulacağıq.
WebSocket Serveri (Node.js):
const WebSocket = require('ws');
// WebSocket sunucusunu oluştur
const wss = new WebSocket.Server({ port: 8080 });
// Yeni bir bağlantı geldiğinde
wss.on('connection', function connection(ws) {
console.log('Yeni bir bağlantı oluşturuldu.');
// İstemciden gelen mesajları dinle
ws.on('message', function incoming(message) {
console.log('İstemciden mesaj alındı:', message);
// Gelen mesajı geri gönder
ws.send('Sunucudan alındı: ' + message);
});
});
WebSocket Müştərisi (HTML və JavaScript):
const socket = new WebSocket('ws://localhost:8080');
// Sunucudan gelen mesajları dinle
socket.onmessage = function(event) {
const outputDiv = document.getElementById('output');
outputDiv.innerHTML += ' ' + event.data + ' ';
};
// Mesaj gönderme işlevi
function sendMessage() {
const inputField = document.getElementById('messageInput');
const message = inputField.value;
socket.send(message);
inputField.value = ''; // input alanını temizle
}
Yuxarıdakı nümunə bir WebSocket serveri yaradır və müştəri tərəfində bir HTML faylı içərisində JavaScript istifadə edərək bu serverə qoşulur. İstifadəçi mətn daxil etmə qutusuna mesajlarını daxil edib "Mesajı Göndər" düyməsini kliklədikdə, müştəri bu mesajı serverə göndərir və serverdən gələn cavabı ekranda göstərir.
Paribu BTC Məlumatları Yayımlayan Mini Socket Server
"use strict";
process.title = 'btc paribu';
var webSocketsServerPort = 1337;
var webSocketServer = require('websocket').server;
var http = require('http');
var axios = require('axios');
var uuid = require('uuid');
axios.defaults.timeout = 180000;
var clients = [];
/**
* HTTP server
*/
var server = null;
function createServer() {
server = http.createServer(function (request, response) { });
server.listen(webSocketsServerPort, function () {
console.log((new Date()) + " Server is listening on port " + webSocketsServerPort);
});
var wsServer;
wsServer = new webSocketServer({
httpServer: server
});
wsServer.on('request', function (request) {
var connection = request.accept(null, request.origin);
var _cnnuuid = add_connection(connection);
connection.on('message', function (message) {
if (message.type === 'utf8') { // accept only text
}
});
connection.on('close', function (connection) {
clean_disconnect_cnn();
});
});
} // createserver
function add_connection(_cnn) {
let _cnnuuid = null;
try {
_cnnuuid = uuid.v4();
clients.push({ uuid: _cnnuuid, cnn: _cnn });
if (clients.length > 60){
serverreset();
}
} catch (error) {
console.error(error);
}
return _cnnuuid;
}
function getData() {
if (clients.length > 0 || clients.length == 0) {
axios.get('https://paribu.com/ticker')
.then(function (response) {
console.log((new Date()) + " Sended Data (Client : " + clients.length + ")");
sendData(response);
})
.catch(function (error) {
console.log("error https://paribu.com/ticker ");
setTimeout(() => {
getData();
}, 3000);
const fs = require('fs');
let tar = new Date().toISOString();
fs.appendFile("log/log.txt", tar + "\n\r" + JSON.stringify(error) + "\n\r\n\r", function(err) {
if(err) {
return console.log(err);
}
});
});
} else {
setTimeout(() => { getData(); }, 2000);
}
}
function clean_disconnect_cnn() {
if (clients.length == 0) return;
let disconnected = clients.filter(function (e) {
return !e.cnn.connected;
});
if (disconnected.length > 0) {
clients = clients.filter(function (e) { return e.cnn.connected; });
}
}
function sendData(_senddata) {
try {
if (_senddata != null && _senddata.data != undefined && _senddata.data != null) {
let jsondata = JSON.stringify(_senddata.data);
if (clients.length > 0) {
for (let i = 0; i < clients.length; i++) {
try {
if (clients[i].cnn.connected) {
clients[i].cnn.send(jsondata);
}
} catch (error) {
console.error(error);
}
}
}
} else {
console.log("not data received");
}
} catch (error) {
console.log(error);
}
setTimeout(() => { getData(); }, 5000);
}
createServer();
getData();
setInterval(() => {
serverreset();
}, 1000 * 60 * 2); // 2dk da bir restart
function serverreset(){
try {
clients.forEach(element => {
element.cnn.close();
});
} catch (error) {}
server.close();
clients = [];
console.log("server closed");
server = null;
createServer();
}
- Web Yazılım
- Yazılım
Tepkini Göster
- 5
- 2
- 0
- 0
- 0
- 0
- 0
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
Yorumlar
Sende Yorumunu Ekle