في مشروع حديث ، كنت بحاجة إلى استخدام الميزات الجديدة لـ Java Websocket ، لذلك تعلمت ذلك وشعرت أن هذه التكنولوجيا كانت ممتعة للغاية. كنت أعرف على الفور كيف تم تنفيذ خدمة العملاء عبر الإنترنت على صفحة الويب.
دعونا نلقي نظرة على الصورة أولاً:
يتم تحقيق التواصل في الوقت الحقيقي بين العديد من العملاء.
دعونا نلقي نظرة على مخطط بنية مشروع الرمز: إنه بسيط للغاية ، فئة واحدة فقط و 1 صفحة
ثم انظر إلى الكود المحدد
انظر إلى رمز الواجهة الخلفية أولاً
package com.main ؛ import java.io.ioException ؛ import java.util.concurrent.copyonwritearrayset ؛ import javax.websocket. تتمثل وظيفتها بشكل أساسي في تحديد الفئة الحالية كجانب خادم WebSocket. * سيتم استخدام قيمة التعليقات التوضيحية للاستماع إلى اتصال المستخدم بعنوان عنوان URL للوصول الطرفي. يمكن للعميل الاتصال بجانب خادم WebSocket من خلال عنوان URL*/@serverendpoint ("/websocket") الفئة العامة H5ServletServersOcket {// المتغيرات الثابتة المستخدمة لتسجيل العدد الحالي للاتصالات عبر الإنترنت. يجب أن تكون مصممة لتكون آمنة الخيط. ثابت خاص int onlinecount = 0 ؛ // يتم استخدام مجموعة مؤشرات الترابط الآمنة للحزمة المتزامنة لتخزين كائن MyWebsocket المقابل لكل عميل. لإدراك أن الخادم يتواصل مع عميل واحد ، يمكنك استخدام MAP لتخزينه ، حيث يمكن للمفتاح تحديد مستخدم CopyWriteArrayset <H5ServleTServersOcket> websocketset = New CopyWriteArrayset <H5ServleServersOctocket> () ؛ // جلسة اتصال مع عميل معين تحتاج إلى إرسال بيانات إلى جلسة الجلسة الخاصة العميل ؛ /** * طريقة لاتصالات الاتصال بنجاح * * param جلسة * معلمات اختيارية. الجلسة هي جلسة اتصال مع عميل ، وتحتاج إلى إرسال بيانات إلى العميل من خلاله*/ onopen public void onopen (جلسة الجلسة) {this.session = session ؛ websocketset.add (هذا) ؛ // addonlinecount () في set ؛ // أضف 1 نظام رقم عبر الإنترنت. } / *** طريقة لتوصيل المكالمات الختامية* / onclose public void onClose () {websocketset.remove (this) ؛ // إزالة subonlinecount () من مجموعة ؛ // delete subonlinecount () من set ؛ // حذف الرقم عبر الإنترنت بواسطة 1 نظام أرقام عبر الإنترنت. } / *** الطريقة التي تسمى بعد استلام رسالة العميل** param message* الرسالة المرسلة من قبل العميل* session* param المعلمات الاختيارية* / @onmessage public void onMessage (رسالة السلسلة ، جلسة الجلسة) {system.out.println ("رسالة من العميل:" + رسالة) ؛ // message bulk لـ (H5ServletServersOcket العنصر: WebSocketset) {try {item.SendMessage (message) ؛ } catch (ioException e) {E.PrintStackTrace () ؛ يكمل؛ }}}} / ** * الاتصال عند حدوث خطأ * * param جلسة * param error * / onerror public void onerror (جلسة الجلسة ، خطأ قابل للارتناء) {system.out.println ("خطأ حدث") ؛ error.printStackTrace () ؛ } /*** هذه الطريقة تختلف عن الطرق المذكورة أعلاه. لا يوجد أي شرح ، إنها طريقة تمت إضافتها وفقًا لاحتياجاتك. * * param message * throws ioException */ public void sendMessage (رسالة سلسلة) يلقي ioException {this.session.getBasicRemote (). sendText (message) ؛ // this.session.getasyncremote (). sendText (message) ؛ } static static synchronized int getOnlinEcount () {return onlinecount ؛ ) } SubOnlinEcount SubOnlinEcount () }}التالي هو رمز الصفحة الأمامية:
<٪@ page language = "java" import = "java.util.*" pageencoding = "utf-8" ٪> <٪ string path = request.getContextPath () ؛ String BasePath = request.getScheme () + ": //" + request.getServerName () + ":" + request.getServerPort () + path + "/" ؛ ٪> <! doctype html> <html> <head> <head> <base href = "<٪ = basepath ٪>" id = "message" style = "color: Blue"> 【الحالة】 </viv> <br/> لقب <input id = "username" type = "text" required = "required"/> <br> content <input id = "text" type = "text"/> <brute <button </butte </butte </butte </butty </butcib type = "text/javaScript"> var websocket = null ؛ // تحكم على ما إذا كان المتصفح الحالي يدعم WebSocket إذا ("WebSocket" في النافذة) {WebSocket = New WebSocket ("WS: //10.1.1.106: 8080/Socket/WebSocket") ؛ } آخر {Alert ('WebSocket غير مدعوم!')} // طريقة رد الاتصال للأخطاء في اتصال WebSocket.onerror = function () {setMessageInnerHtml ("error") ؛ } ؛ // طريقة رد الاتصال للاتصال الناجح websocket.onopen = function (event) {setMessageInnerHtml ("RATH Room Enupted") ؛ }. } // connection طريقة الاتصال المغلقة websocket.onclose = function () {setMessageInnerHtml ("غرفة الدردشة") ؛ } // استمع إلى حدث إغلاق النافذة. عند إغلاق النافذة ، تغلق بشكل نشط اتصال WebSocket لمنع الإغلاق قبل فصل الاتصال ، وسيقوم جانب الخادم بإلقاء استثناءات. window.onbeforeUnload = function () {websocket.close () ؛ }. } // أغلق وظيفة الاتصال CloseWebSocket () {WebSocket.close () ؛ } // إرسال وظيفة الرسالة send () {var username = document.getElementById ('username'). value ؛ var message = document.getElementById ('text'). value ؛ var msg = "【" + username + "] Speak:" + Message WebSocket.send (msg) ؛ } </script> </html>ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.