WebSocket چیست؟ چگونه ارتباط لحظه‌ای بین مرورگر و سرور ایجاد می‌شود؟

What Is WebSocket? How Real-Time Communication Works Between Browser and Server WebSocket چیست؟ چگونه ارتباط لحظه‌ای بین مرورگر و سرور ایجاد می‌شود؟

What Is WebSocket? How Real-Time Communication Works Between Browser and Server

In many websites, communication between the browser and the server works through a simple request and response model. The browser sends a request, the server processes it, and then sends a response back. This approach works very well for many web applications, but it is not always the best solution for applications that need real-time updates.

WebSocket is a communication protocol that allows a persistent, two-way connection between a Client and a Server. Once the connection is established, both the browser and the server can send data at any time.


Why Is Normal HTTP Not Always Enough for Real-Time Communication?

With normal HTTP communication, the Client usually sends a request to the Server, and the Server returns a response related to that request.

For example, if an application needs to detect new information from the server, it may have to send a new request every few seconds. This technique, commonly known as Polling, can create unnecessary requests and consume additional resources.

WebSocket solves this problem by creating a persistent connection between the Client and Server.


How Does WebSocket Work?

The WebSocket process starts by establishing a connection. The browser sends a special request to the server to start a WebSocket connection.

If the server accepts the request, the WebSocket connection is established and a persistent communication channel is created between the Client and Server.

After that, a new connection does not need to be created for every message. Both sides can use the same connection to send and receive data.

Browser
   ↕
WebSocket Connection
   ↕
Server

What Is a WebSocket Handshake?

Before WebSocket communication actually begins, the browser and server need to establish and confirm the connection. This process is called the WebSocket Handshake.

The initial handshake uses HTTP and tells the server that the Client wants to upgrade the HTTP connection to a WebSocket connection.

If the server accepts the request, the connection is upgraded and two-way communication can begin.


Two-Way Communication with WebSocket

One of the most important features of WebSocket is two-way communication, also known as Full-Duplex Communication.

With this model, the Server does not have to wait for another request from the Client. If new information becomes available, the Server can immediately send that information to the Client.

For example, in an online chat application, when one user sends a new message, the server can immediately deliver that message to other connected users.


WebSocket vs REST API

Both WebSocket and REST API are used for communication between Clients and Servers, but they work in different ways.

Feature REST API WebSocket
Communication Type Request / Response Two-Way
Persistent Connection Usually No Yes
Server Can Send Data Without a New Request Usually No Yes
Best For APIs and Standard Web Operations Real-Time Applications

This does not mean that WebSocket is always better than REST API. The right communication method depends on the requirements of the project.


What Are the Main Uses of WebSocket?

  • Online Chat: Sending and receiving messages instantly between users.
  • Real-Time Notifications: Showing new notifications without refreshing the page.
  • Online Games: Transmitting player states and game events quickly.
  • Real-Time Dashboards: Displaying live statistics and information.
  • Live Tracking: Showing the real-time location of vehicles, delivery agents, or devices.
  • Booking Systems: Updating the status of seats, cabins, or available capacity in real time.

Advantages of WebSocket

  • Two-way communication between Client and Server
  • Receiving data without sending a new Request
  • Suitable for Real-Time applications
  • Reduces the need for Polling in many scenarios
  • Suitable for continuous data transmission

Limitations and Challenges of WebSocket

Despite its advantages, WebSocket is not always necessary. A persistent connection can consume more resources than a simple HTTP request, and managing a large number of simultaneous connections requires proper server-side architecture.

Large applications may also need to properly handle connection failures, Reconnection, Authentication, Scalability, and Error Handling.


A Simple WebSocket Example

A WebSocket connection can be created in the browser like this:

const socket = new WebSocket("wss://example.com/socket");

socket.onopen = () => {
    console.log("Connected");
};

socket.onmessage = (event) => {
    console.log("Message:", event.data);
};

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

In this example, the browser creates a WebSocket connection with the server. After the connection is established, messages received from the server can be handled using the onmessage event.


WebSocket in Real-World Projects

Imagine an online booking system where several users are viewing availability at the same time. If one user books a cabin, it would be better if the cabin status immediately changed for the other users as well.

With WebSocket, the Server can send the updated status to connected Clients immediately after the booking is completed. As a result, users can see the latest information without refreshing the page.


Frequently Asked Questions About WebSocket

Is WebSocket a Replacement for REST API?

No. WebSocket and REST API are designed for different requirements. REST API is suitable for many standard Client-Server operations, while WebSocket is more suitable for persistent and Real-Time communication.

Is WebSocket Only Used for Chat Applications?

No. Chat is one of the most popular WebSocket use cases, but it can also be used for online games, real-time dashboards, notifications, tracking systems, and many other Real-Time applications.

What Is the Difference Between WebSocket and HTTP?

HTTP usually works through a Request and Response model, while WebSocket creates a persistent two-way connection where both sides can send data during the connection.

What Is the Secure Version of WebSocket?

WSS is commonly used for secure WebSocket communication. It uses TLS to protect the connection.


Conclusion

WebSocket is an important technology for building Real-Time web applications. Unlike the traditional Request/Response model, WebSocket creates a persistent two-way connection between the Client and Server and allows the server to send new information without waiting for another Request.

For this reason, WebSocket is useful for online chat, real-time notifications, online games, live dashboards, booking systems, and tracking applications. However, it should be used according to the actual requirements of the project, with proper attention to connection management and scalability.

WebSocket چیست؟ چگونه ارتباط لحظه‌ای بین مرورگر و سرور ایجاد می‌شود؟

در بسیاری از وب‌سایت‌ها، ارتباط بین مرورگر و سرور به این شکل انجام می‌شود که مرورگر یک درخواست ارسال می‌کند و سرور پس از پردازش، یک پاسخ برمی‌گرداند. این روش برای بسیاری از برنامه‌های وب کاملاً مناسب است؛ اما در برنامه‌هایی که به دریافت اطلاعات به‌صورت لحظه‌ای نیاز دارند، همیشه بهترین انتخاب نیست.

WebSocket یک پروتکل ارتباطی است که امکان ایجاد یک ارتباط دائمی و دوطرفه بین Client و Server را فراهم می‌کند. به کمک WebSocket، پس از برقراری اتصال، هم مرورگر و هم سرور می‌توانند در هر زمان داده ارسال کنند.


چرا HTTP معمولی برای ارتباط لحظه‌ای کافی نیست؟

در ارتباط معمول HTTP، Client معمولاً درخواست خود را برای Server ارسال می‌کند و Server نیز پاسخ مربوط به آن درخواست را برمی‌گرداند.

برای مثال، اگر یک برنامه بخواهد وضعیت جدیدی را از سرور دریافت کند، ممکن است مجبور باشد هر چند ثانیه یک درخواست جدید ارسال کند تا متوجه تغییرات شود. این روش که معمولاً با نام Polling شناخته می‌شود، می‌تواند باعث ایجاد درخواست‌های اضافی و مصرف بیشتر منابع شود.

WebSocket این مشکل را با ایجاد یک اتصال دائمی بین Client و Server حل می‌کند.


WebSocket چگونه کار می‌کند؟

فرآیند WebSocket با برقراری یک اتصال اولیه آغاز می‌شود. مرورگر ابتدا یک درخواست مخصوص برای شروع ارتباط WebSocket به سرور ارسال می‌کند.

اگر سرور این درخواست را قبول کند، اتصال WebSocket برقرار می‌شود و یک کانال ارتباطی دائمی بین Client و Server شکل می‌گیرد.

پس از آن، دیگر لازم نیست برای هر پیام یک اتصال جدید ایجاد شود. هر دو طرف می‌توانند از همان اتصال برای ارسال و دریافت اطلاعات استفاده کنند.

Browser
   ↕
WebSocket Connection
   ↕
Server

WebSocket Handshake چیست؟

قبل از اینکه ارتباط WebSocket به‌صورت واقعی شروع شود، مرورگر و سرور باید اتصال را ایجاد و تأیید کنند. این مرحله را WebSocket Handshake می‌نامند.

Handshake در ابتدا با استفاده از HTTP انجام می‌شود و به سرور اعلام می‌کند که Client قصد دارد ارتباط HTTP را به یک اتصال WebSocket ارتقا دهد.

اگر سرور درخواست را قبول کند، ارتباط به WebSocket ارتقا پیدا می‌کند و پس از آن ارتباط دوطرفه آغاز می‌شود.


ارتباط دوطرفه در WebSocket

یکی از مهم‌ترین ویژگی‌های WebSocket، ارتباط دوطرفه یا Full-Duplex Communication است.

در این مدل، Server لازم نیست منتظر درخواست جدید از طرف Client باشد. اگر اطلاعات جدیدی در سرور ایجاد شود، سرور می‌تواند همان لحظه آن اطلاعات را برای Client ارسال کند.

برای مثال، در یک برنامه چت آنلاین، وقتی یک کاربر پیام جدیدی ارسال می‌کند، سرور می‌تواند پیام را بلافاصله برای کاربران دیگر ارسال کند.


تفاوت WebSocket و REST API

WebSocket و REST API هر دو برای ارتباط بین Client و Server استفاده می‌شوند، اما روش کار آن‌ها متفاوت است.

ویژگی REST API WebSocket
نوع ارتباط Request / Response دوطرفه
اتصال دائمی معمولاً خیر بله
ارسال اطلاعات توسط Server بدون درخواست جدید به‌صورت مستقیم معمولاً خیر بله
مناسب برای APIها و عملیات معمول وب برنامه‌های Real-Time

این به معنی بهتر بودن همیشگی WebSocket نسبت به REST API نیست. انتخاب روش ارتباطی به نیاز پروژه بستگی دارد.


WebSocket چه کاربردهایی دارد؟

  • چت آنلاین: ارسال و دریافت سریع پیام‌ها بین کاربران.
  • اعلان‌های لحظه‌ای: نمایش Notification جدید بدون Refresh کردن صفحه.
  • بازی‌های آنلاین: انتقال سریع وضعیت بازیکنان و رویدادهای بازی.
  • داشبوردهای Real-Time: نمایش لحظه‌ای اطلاعات و آمار.
  • Live Tracking: نمایش موقعیت لحظه‌ای خودرو، پیک یا دستگاه.
  • سیستم‌های رزرو: نمایش تغییر وضعیت صندلی‌ها، کابین‌ها یا ظرفیت‌ها در لحظه.

مزایای WebSocket

  • ارتباط دوطرفه بین Client و Server
  • امکان دریافت اطلاعات بدون ارسال Request جدید
  • مناسب برای برنامه‌های Real-Time
  • کاهش نیاز به Polling در بسیاری از سناریوها
  • مناسب برای ارسال مداوم اطلاعات

محدودیت‌ها و چالش‌های WebSocket

با وجود مزایای WebSocket، استفاده از آن همیشه ضروری نیست. اتصال دائمی می‌تواند منابع بیشتری نسبت به یک درخواست ساده HTTP مصرف کند و مدیریت تعداد زیادی اتصال هم نیازمند طراحی مناسب سمت Server است.

همچنین در پروژه‌های بزرگ باید مواردی مانند مدیریت قطع اتصال، Reconnection، احراز هویت، مقیاس‌پذیری و مدیریت خطا به‌درستی پیاده‌سازی شوند.


یک مثال ساده از WebSocket

در مرورگر می‌توان یک اتصال WebSocket ایجاد کرد:

const socket = new WebSocket("wss://example.com/socket");

socket.onopen = () => {
    console.log("Connected");
};

socket.onmessage = (event) => {
    console.log("Message:", event.data);
};

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

در این مثال، مرورگر یک اتصال WebSocket با سرور ایجاد می‌کند. پس از برقراری اتصال، می‌توان پیام‌های دریافتی از سرور را با رویداد onmessage دریافت کرد.


WebSocket در پروژه‌های واقعی

فرض کنید یک سیستم رزرو آنلاین داریم که چند کاربر به‌صورت هم‌زمان در حال مشاهده ظرفیت هستند. اگر یک کاربر یک کابین را رزرو کند، بهتر است وضعیت آن کابین برای کاربران دیگر نیز بلافاصله تغییر کند.

با WebSocket، Server می‌تواند پس از ثبت رزرو، تغییر وضعیت را برای Clientهای متصل ارسال کند. در نتیجه کاربران بدون Refresh کردن صفحه، اطلاعات جدید را مشاهده می‌کنند.


سؤالات متداول درباره WebSocket

آیا WebSocket جایگزین REST API است؟

خیر. WebSocket و REST API برای نیازهای متفاوتی استفاده می‌شوند. REST API برای بسیاری از عملیات معمول Client و Server مناسب است، در حالی که WebSocket برای ارتباط دائمی و Real-Time کاربرد بیشتری دارد.

آیا WebSocket فقط برای چت استفاده می‌شود؟

خیر. چت یکی از معروف‌ترین کاربردهای WebSocket است، اما از آن می‌توان در بازی‌های آنلاین، داشبوردهای لحظه‌ای، اعلان‌ها، سیستم‌های ردیابی و بسیاری از برنامه‌های Real-Time استفاده کرد.

تفاوت WebSocket و HTTP چیست؟

HTTP معمولاً بر پایه Request و Response کار می‌کند، در حالی که WebSocket یک ارتباط دائمی و دوطرفه ایجاد می‌کند که هر دو طرف می‌توانند در طول اتصال داده ارسال کنند.

WebSocket از چه پروتکلی برای ارتباط امن استفاده می‌کند؟

برای ارتباط امن معمولاً از WSS استفاده می‌شود که نسخه امن WebSocket است و ارتباط را از طریق TLS رمزنگاری می‌کند.


جمع‌بندی

WebSocket یکی از فناوری‌های مهم برای ساخت برنامه‌های Real-Time در وب است. برخلاف ارتباط معمول Request/Response، WebSocket یک اتصال دائمی و دوطرفه بین Client و Server ایجاد می‌کند و به سرور اجازه می‌دهد اطلاعات جدید را بدون انتظار برای Request بعدی ارسال کند.

به همین دلیل، WebSocket انتخاب مناسبی برای چت آنلاین، اعلان‌های لحظه‌ای، بازی‌های آنلاین، داشبوردهای Real-Time و سیستم‌های رزرو و ردیابی است. البته استفاده از آن باید بر اساس نیاز واقعی پروژه انجام شود و مدیریت اتصال و مقیاس‌پذیری نیز در نظر گرفته شود.

Back to Articles