آموزش HTML - وبسوکت
وبسوکت (WebSockets) یک فناوری ارتباطی دوطرفه و نسل جدید برای برنامههای کاربردی وب است که روی یک سوکت منفرد کار میکند.
وبسوکتها امکان ارتباط دوطرفه را فراهم میکنند، به این معنی که هم کلاینت و هم سرور میتوانند بهطور مستقل و همزمان به یکدیگر داده ارسال کنند.
پس از برقرار کردن یک اتصال وبسوکت با سرور وب، میتوانیم با فراخوانی متد send() دادهها را از مرورگر به سرور ارسال کنیم و با استفاده از گرداننده رویداد onmessage دادهها را از سرور در مرورگر دریافت کنیم.
سینتکس
در ادامه API مربوطه که یک شیء WebSocket جدید میسازد آورده شده است:
var Socket = new WebSocket(url, [protocol] );
در اینجا آرگومان اول، url، آدرسی را مشخص میکند که باید به آن متصل شد. ویژگی دوم، protocol، اختیاری است و در صورت وجود، زیرپروتکلی را مشخص میکند که سرور برای موفقیتآمیز بودن اتصال باید از آن پشتیبانی کند.
ویژگیهای وبسوکت (Attributes)
در ادامه ویژگیهای شیء WebSocket آورده شده است. با این فرض که شیء سوکت را مطابق آنچه در بالا گفته شد ساختهایم:
| ویژگی | توضیحات |
|---|---|
| Socket.readyState |
ویژگی فقطخواندنی readyState وضعیت اتصال را نشان میدهد. این ویژگی میتواند مقادیر زیر را داشته باشد:
|
| Socket.bufferedAmount |
ویژگی فقطخواندنی bufferedAmount تعداد بایتهای متن UTF-8 را نشان میدهد که با استفاده از متد |
رویدادهای وبسوکت (Events)
در ادامه رویدادهای مرتبط با شیء WebSocket آورده شده است. با این فرض که شیء سوکت را مطابق آنچه در بالا گفته شد ساختهایم:
| رویداد | مقادیر و گرداننده رویداد | مقادیر و توضیحات |
|---|---|---|
| open | Socket.onopen | این رویداد زمانی رخ میدهد که اتصال سوکت برقرار شود. |
| message | Socket.onmessage | این رویداد زمانی رخ میدهد که کلاینت دادهای از سرور دریافت کند. |
| error | Socket.onerror | این رویداد زمانی رخ میدهد که خطایی در ارتباط بهوجود آید. |
| close | Socket.onclose | این رویداد زمانی رخ میدهد که اتصال بسته شود. |
متدهای وبسوکت (Methods)
در ادامه متدهای مرتبط با شیء WebSocket آورده شده است. با این فرض که شیء سوکت را مطابق آنچه در بالا گفته شد ساختهایم:
| متد | توضیحات |
|---|---|
| Socket.send() |
متد send(data) دادهها را با استفاده از اتصال موجود منتقل میکند. |
| Socket.close() |
متد close() برای خاتمه دادن به هرگونه اتصال موجود استفاده میشود. |
راهاندازی سرور وبسوکت با پایتون
- گام ۱. نصب پایتون
- اگر پایتون روی دستگاه شما نصب نیست، آن را از Python.org دانلود و نصب کنید.
- گام ۲. نصب کتابخانه WebSocket
- پس از نصب پایتون، یک پوشه برای پروژه خود بسازید و آن پوشه را در خط فرمان (Command Prompt) یا ترمینال باز کنید. سپس این دستور را اجرا کنید.
pip install websockets
- گام ۳. ساخت سرور وبسوکت
- یک ویرایشگر متن باز کنید و کد پایتون زیر را بنویسید. سپس آن را به عنوان یک فایل در پوشه با نام 'server.py' ذخیره کنید.
import asyncio
import websockets
async def echo(websocket, path):
async for message in websocket:
print(f"Received message: {message}")
await websocket.send(f"Server: You said \"{message}\"")
start_server = websockets.serve(echo, "localhost", 8080)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
- گام ۴. اجرای سرور
- در ترمینال به پوشه پروژه خود بروید و این دستور را برای شروع به کار سرور اجرا کنید.
python server.py
راهاندازی کلاینت HTML برای سرور
تا اینجا یک سرور پایتون برای وبسوکت راهاندازی کردهایم. سرور در ترمینال شما در حال اجرا خواهد بود، بنابراین هر پیامی که به سرور ارسال شود در ترمینال قابل مشاهده است. در اینجا خواهیم دید که چگونه با استفاده از HTML و JavaScript یک کلاینت راهاندازی کنیم که بتواند پیامها را از سرور دریافت کند و همچنین پیامهایی را به سرور بفرستد.
یک فایل HTML با نام 'index.html' در پوشه ایجاد کنید.
<!DOCTYPE html>
<html lang="en">
<head>
<title>WebSocket Example</title>
</head>
<body>
<h1>WebSocket Client</h1>
<input type="text"
id="messageInput"
placeholder="Type a message..." />
<button id="sendButton">
Send
</button>
<div id="messages">
</div>
<script>
const socket = new WebSocket('ws://localhost:8080');
socket.addEventListener('open',
() => {
console.log('Connected to server');
});
socket.addEventListener('message',
(event) => {
const messageDiv = document.createElement('div');
messageDiv.textContent = event.data;
document.getElementById('messages').appendChild(messageDiv);
});
document.getElementById('sendButton').addEventListener('click',
() => {
const messageInput = document.getElementById('messageInput');
const message = messageInput.value;
socket.send(message);
messageInput.value = '';
});
</script>
</body>
</html>
پیشرفت مطالعه: وضعیت خواندهشدن این درس فقط در همین مرورگر ذخیره میشود؛ بدون نیاز به حساب کاربری.