Skip to main content

WebSocket

ابزاری برای پیاده‌سازی سوکت که به صورت پیش‌فرض داخل core اصلی javascript وجود داره و نیاز به ایمپورت پکیج، کتابخونه و یا ماژول خاصی نداره

در داخل Client با استفاده از کد زیر قابل دسترس هست:

const socket = new WebSocket();

داخل Server(Node.js) باید از پکیجی به اسم ws استفاده کنیم:

npm install ws

Server​

برای استارت سوکت در سرور ابتدا پکیج ws را نصب میکنیم

npm install --save ws

سپس یک سرور را به آن به عنوان پورتی برای فعالیت socket پاس میدهیم. و درنهایت سرور را روی پورت مدنظر ران میکنیم.

const http = require("http");
const webSocket = require("ws");

const server = http.createServer();
const ws = new webSocket.Server({ server });

server.listen(8000, () => console.log("Server runned on port 8000"));

حال برخی listener ها ws دارد که میتونیم با استفاده از آن دیتای رد و بدل شده رو بگیریم.

Headers​

برای مثل زمانی که header ارسال میشود میتونیم به استفاده از متد زیر هدر هارا دریافت کنیم:

ws.on("headers", (headers, req) => {
console.log(headers);
});

خروجی headers شامل برخی موارد مانند آیدی کانکشن سوکت ایجاد شده و ... هست

Connection​

همچنین میتوانیم زمانی که کانکشن برقرار میشود آنرا با استفاده از متد زیر ترک کنیم:

ws.on("connection", (socket, req) => {
console.log("Connection created successfully");
});

Message​

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

ws.on("connection", (socket, req) => {
console.log("Connection created successfully");

socket.on("message", (data) => {
console.log(data.toString());
});
});

در اینجا مقدار data.toString شامل پیام کلاینت هست

Close, Error​

بسته شدن کانکشن یا رخ دادن ارور هم میتوانیم به صورت زیر ترک کنیم:

ws.on("close", () => console.log("Connection closed"));
ws.on("error", (err) => console.log("error :" + err));

Example​

یک مثال کامل از ایجاد سوکت در سمت سرور به صورت زیر هست :

server.js
const http = require("http");
const webSocket = require("ws");

const server = http.createServer();
const ws = new webSocket.Server({ server });

ws.on("headers", (headers, req) => {
console.log(headers);
});

ws.on("connection", (socket, req) => {
socket.send("Hello Client!");
socket.on("message", (data) => {
console.log(data.toString());
});
});

ws.on("close", () => console.log("Connection closed"));
ws.on("error", (err) => console.log(err));

server.listen(8000, () => console.log("Server runned on port 8000"));

Client​

نحوه‌ی برقراری ارتباط با سوکت سرور از سوی کلاینت را اینجا توضیح میدیم:

نیاز به نصب پکیج خاصی نیست.

برای شروع کار یک کانکشن به url-ای که سوکت سرور روش قرار داره برقرار میکنیم:

const socket = new WebSocket("ws://localhost:8000");

دقت کن که ws:// به این خاطر هست که کانکشن ما روی پروتکل websocket برقرار هست. ما انواع پروتکل داریم که مانند http, https, ws, ftp, ... هستن که صرفا یسری قوانین برای خودشون دارن. توهم میتونی برای خودت یک پروتکل دلخواه با قوانین دلخواه بسازی !

onOpen​

زمانی که کانکشن به طور موفق با سوکت سرور برقرار بشه میتونیم از این متد استفاده کنیم:

socket.onopen = (event) => {
console.log("Connection oppend successfully");
};

onMessage​

زمانی که پیامی از سرور دریافت میکنیم میتونیم با استفاده از این متد دریافتش بکنیم:

socket.onmessage = (event) => {
console.log(event.data);
};

onClose​

زمانی که کانکشن بسته میوشد میتونیم این متد رو کال کنیم:

socket.onclose = () => {
console.log("Connection closed");
};

onerror​

زمانی که ارور داریم میتونیم این متد رو کال کنیم:

socket.onerror = (err) => {
console.log("Error : " + err);
};

Example​

یک مثال از یک کلاینت برای برقراری ارتباط با سوکت سرور اینجا آوردیم:

const socket = new WebSocket("http://localhost:8000");

socket.onopen = (event) => {
socket.send("Hello Server!");
};

socket.onmessage = (event) => {
const p = document.createElement("p");
p.innerText = event.data;
document.body.appendChild(p);
socket.send("Your message recived !");
};

socket.onclose = () => {
console.log("Connection closed");
};

socket.onerror = (err) => {
console.log(err);
};