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

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

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

ابدأ الدورة

WebSocket في Java: بناء تطبيقات فورية متقدمة



تتطلب تطبيقات الويب الحديثة بشكل متزايد نقل البيانات الفوري بين العميل والخادم. بروتوكول HTTP التقليدي، القائم على الطلب والاستجابة، غير فعال للمهام التي تكون فيها زمنية الاستجابة حرجة: الدردشات عبر الإنترنت، أسعار الأسهم، تحرير المستندات التعاوني، أو خوادم الألعاب. يحل بروتوكول WebSocket هذه المشكلة عن طريق إنشاء اتصال ثنائي الاتجاه مستمر. في هذا المقال، سنستكشف تقنيات متقدمة للعمل مع WebSocket في Java، متجاوزين الأمثلة الأساسية.



1. بنية تطبيق WebSocket متقدم في Java



مثال WebSocket الأساسي في Java باستخدام التعليق @ServerEndpoint جيد للتعلم، لكن الحلول الإنتاجية تتطلب بنية أكثر متانة. دعنا نلقي نظرة على المكونات الرئيسية.



1.1. اختيار حزمة التقنيات

بالنسبة لتطبيقات المؤسسات، فإن المعيار الفعلي هو Spring Boot مع وحدة spring-boot-starter-websocket. توفر هذه الحزمة تكاملاً مع STOMP (بروتوكول الرسائل النصية البسيط الموجه) - وهو بروتوكول فرعي فوق WebSocket يضيف توجيه الرسائل والطوابير والاشتراكات.



1.2. تكوين WebSocket الأساسي في Spring Boot

لنبدأ بفئة التكوين:



@Configuration@EnableWebSocketMessageBrokerpublic class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

@Override public void configureMessageBroker(MessageBrokerRegistry config) { // وسيط مدمج لوجهات /topic و /queue config.enableSimpleBroker("/topic", "/queue"); // بادئة للرسائل من العميل إلى الخادم config.setApplicationDestinationPrefixes("/app"); // بادئة للطوابير الخاصة بالمستخدم (نقطة إلى نقطة) config.setUserDestinationPrefix("/user"); }

@Override public void registerStompEndpoints(StompEndpointRegistry registry) { // نقطة نهاية للاتصال عبر SockJS (حل بديل للمتصفحات القديمة) registry.addEndpoint("/ws") .setAllowedOrigins("*") .withSockJS(); }}


يقوم هذا الكود بتكوين نقاط نهاية الاتصال، وبادئات التوجيه، ووسيط رسائل مدمج. استخدام STOMP يبسط بشكل كبير العمل مع الاشتراكات والطوابير.



2. معالجة الرسائل المتقدمة: من الدردشة إلى بيانات سوق الأسهم



الآن دعنا ننتقل إلى تنفيذ سيناريوهات محددة. لنفكر في ثلاث حالات نموذجية: الدردشة الجماعية، الإشعارات الشخصية، وتدفق البيانات.



2.1. الدردشة الجماعية مع سجل الرسائل

الدردشة البسيطة هي بث الرسائل إلى موضوع. دعنا نعقد المهمة: إضافة حفظ سجل الرسائل وتصفيتها حسب الغرف.



@Controllerpublic class ChatController {

@Autowired private ChatMessageRepository repository; // مستودع JPA

@MessageMapping("/chat.sendMessage") @SendTo("/topic/chat/{roomId}") public ChatMessage sendMessage(@Payload ChatMessage message, @DestinationVariable String roomId, SimpMessageHeaderAccessor headerAccessor) { // حفظ في قاعدة البيانات message.setTimestamp(Instant.now()); repository.save(message); // إضافة معلومات المرسل من الجلسة String username = (String) headerAccessor.getSessionAttributes().get("username"); message.setSender(username); return message; }

@MessageMapping("/chat.addUser") @SendTo("/topic/chat/{roomId}") public ChatMessage addUser(@Payload ChatMessage message, @DestinationVariable String roomId, SimpMessageHeaderAccessor headerAccessor) { headerAccessor.getSessionAttributes().put("username", message.getSender()); return message; }}


هنا نستخدم

المدونات

توصيات الكتب