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
یک مثال کامل از ایجاد سوکت در سمت سرور به صورت زیر هست :
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);
};