مكتبات WebSocket في Java: دليل شامل لتحقيق الاتصال الفوري

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مكتبة WebSocket في Java: دليل شامل لتطوير تطبيقات الوقت الفعلي

WebSocket هو بروتوكول يتيح الاتصال ثنائي الاتجاه بين العميل والخادم عبر اتصال TCP واحد طويل الأمد. في Java، توجد عدة مكتبات ناضجة تُبسّط العمل مع WebSocket. في هذه المقالة، سنستعرض المكتبات الرئيسية وإمكانياتها ونقدم أمثلة عملية.



1. Java WebSocket API (JSR 356)

واجهة برمجة التطبيقات القياسية للعمل مع WebSocket في Java EE / Jakarta EE. وهي جزء من خوادم التطبيقات (WildFly، TomEE، GlassFish) وتتيح إنشاء نقاط نهاية من جانب الخادم والعميل.

الإمكانيات الرئيسية:

  • التعليقات التوضيحية @ServerEndpoint و @ClientEndpoint
  • دعم الرسائل النصية والثنائية
  • إدارة الجلسات ودورة الحياة
  • التكامل مع CDI (Contexts and Dependency Injection)

مثال لنقطة نهاية خادم:

import javax.websocket.*;import javax.websocket.server.ServerEndpoint;import java.io.IOException;

@ServerEndpoint("/chat")public class ChatEndpoint {

@OnOpen public void onOpen(Session session) { System.out.println("اتصال جديد: " + session.getId()); session.getUserProperties().put("username", "ضيف"); }

@OnMessage public String onMessage(String message, Session session) { String username = (String) session.getUserProperties().get("username"); return username + ": " + message; }

@OnClose public void onClose(Session session, CloseReason reason) { System.out.println("تم إغلاق الاتصال: " + reason.getReasonPhrase()); }

@OnError public void onError(Session session, Throwable error) { error.printStackTrace(); }}

مثال للعميل:

import javax.websocket.*;import java.net.URI;

@ClientEndpointpublic class ChatClient {

private Session session;

@OnOpen public void onOpen(Session session) { System.out.println("تم الاتصال بالخادم"); this.session = session; }

@OnMessage public void onMessage(String message) { System.out.println("تم الاستلام: " + message); }

public void sendMessage(String message) throws IOException { if (session != null && session.isOpen()) { session.getBasicRemote().sendText(message); } }

public static void main(String[] args) throws Exception { WebSocketContainer container = ContainerProvider.getWebSocketContainer(); ChatClient client = new ChatClient(); container.connectToServer(client, new URI("ws://localhost:8080/chat")); client.sendMessage("مرحباً بالعالم!"); Thread.sleep(1000); }}


2. Tyrus (التنفيذ المرجعي)

Tyrus هو التنفيذ المرجعي لـ JSR 356 من Oracle. يمكن استخدامه كمكتبة مستقلة بدون خادم تطبيقات كامل. مثالي للخدمات المصغرة والتطبيقات خفيفة الوزن.

الميزات:

  • يعمل مع Grizzly أو Jetty أو خادم JDK HTTP
  • دعم SockJS للتوافق مع المتصفحات التي لا تدعم WebSocket
  • مرشحات ومعترضات قابلة للتخصيص
  • تكوين مرن عبر XML أو Java Config

مثال لخادم مستقل على Tyrus + Grizzly:

import org.glassfish.tyrus.server.Server;import javax.websocket.*;import javax.websocket.server.ServerEndpoint;

@ServerEndpoint("/echo")public class EchoEndpoint {

@OnMessage public String echo(String message) { return "صدى: " + message; }

public static void main(String[] args) { Server server = new Server("localhost", 8025, "/ws", EchoEndpoint.class); try {

توصيات