Dans l'exemple de l'application d'intégration WebSocket de Spring WebSocket (partie 1), nous avons implémenté WebSocket, mais il existe toujours une classe d'implémentation commerciale principale qui n'a pas été implémentée. Ici, nous mettons en œuvre cette classe Core Business. Parce que le système auquel j'ai participé utilise WebSocket pour envoyer des messages, l'implémentation est de savoir comment envoyer des messages.
7. Implémentation de NewsListenerImpll
Package cn.bridgeli.websocket; import com.google.gson.gson; import com.google.gson.gsonbuilder; import com.lagou.common.base.util.date.dateutil; import com.lagou.platform.news.api.enemery.platnewscatytype; com.lagou.platform.news.web.dao.exx com.lagou.platform.news.web.service.platNewsService; import org.apache.commons.lang.stringutils; import org.json.simple.jsonArray; import org.json.simple.jsonobject; import org.quartz. org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.beans.factory.annotation.autowired; import org.springframework.teteteotype. java.util.date; importer java.util.list; import java.util.concurrent.executorservice; import java.util.concurrent.executors; / *** @description: Classe de messages en site Implémentation * @date: 16-3-7 * / @ Logger de la classe de composant = Logger de la classe de composante = LoggerFactory.getLogger (NewsListenerImplL.class); gson gson = new gsonBuilder (). SetDateFormat ("yyyy-mm-dd hh: mm: ss"). Create (); // thread pool private ExecutERService ExecutorService = EMIRGETOR StdscheDulerFactory (); @ AutowiredPrivate PlatNewSService PlatNewSService; @OverRidePublic Void Afterpersiste (Platnewsvo Platnewsvo) {Logger.info ("A Écouté un nouveau message ajouté. . . "); logger.info (" Le nouveau message est: "+ gson.tojson (platNewsvo)); // démarrer le thread if (null! = platNewsvo &&! stringUtils.isblank (platnewsvo.getCurrentoPoERatorEmail ())) {// si c'est un message chronométré if (plateNewsvo.getNewstype () == PlatNewScategoryType.timing_time.getCategoryId ()) {startTimingTask (PlatNewSvo); Email) {Logger.info ("Poussez un nouveau message après avoir établi une connexion WebSocket ..."); StartTimingTask (PlatNewsvo Platnewsvo) {Logger.info ("Démarrer la tâche de message push chronométré ..."); Date timingtime = platNewsvo.gettimingTime (); if (null == timingtime) {logger.info ("temps de messagerie timed est nul "+ DateUtil.date2String (timingTime)); jobDetail jobDetail = jobBuilder.newjob (timingjob.class) .withIdentity (platNewsvo.getCurrentoperatorAmail () +" Message chronométré "+ PlatNewSvo.GetId ()," Message du site "). Build (); // passer les paramètres jobDetail.getJobDatAmap (). put ("platNewSService", platNewSService); jobdetail.getJobdataMap (). Trigger "+ PlatNewsvo.getID ()," Message en site "). Startat (timingTime) .WithSchedule (SimpleScheduleBuilder.Simpleschedule (). Intervalinseconds (0) // Time Interval.WithrepeatCount (0) // répétitif (0) // Numéro de répétitions). Try {Scheduler sched = sf.getscheduler (); sched.scheduleJob (jobdetail, déclencheur); if (! sched.isshutdown ()) {sched.start ();}} catch (schedulErexception e) {logger.info (e.toString ());} logger.info ("terminer la tâche du message de tir de la fois. . . ");} / *** @Description: Push Thread après avoir établi un lien WebSocket * / class AfterConnectionEstABLishTask implémente Runnable {String Email; public afterConnectionSabiedTask (String Email) {this.email = email;} @ overRidepublic void run () {Logger.info (" Démarrer les messages push vers l'utilisateur: "+ e-mail +" .... "); if (! stringUtils.isblank (e-mail)) {searchCondition SearchCondition = new SearchCondition (); searchCondition.SetOperatorAmail (e-mail); jsonArray JSONArray = new JSONArray (); for (platNewScategoryType Type: PlatNewScategoryType.Values ()) {searchCondition.SetTypeid (type.getCategoryId ()); int count = plateNewSService.CountPlatNewSByExample (SearchCondition); jsonObject Object = new JsonObject (); object.put ("name", type.name ()); object.put ("Description", type.getDescription ()); object.put ("count", count); jsonArray.add (objet);} if (null! = JsonArray && jsonArray.size ()> 0) {usingOcketVo UsersocketVo = WSSESSESSLOCALCACHE.GET (EMAIL); TextMessage Remontage = new TextMessage (gson.tojson (JSONArray)); essayez {if (null! = UsersocketVo) {// Push Message UsersocketVo PushwebsWetsession (). Usersocketvo.SetLastSendTime (dateUtil.getNowDate ()); Logger.info ("Terminez Push New Message vers l'utilisateur:" + usersocketvo.getUserEremail () + ". . . ");}} catch (ioException e) {logger.error (e.toString ()); logger.info (" push de message en site a échoué ... "+ e.toString ());}}} logger.info (" End Push Message to "+ email +" .... ");}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}.Cette classe est la mise en œuvre de l'entreprise principale de WebSocket. Sa certitude spécifique est liée à l'entreprise. En raison de différentes affaires, la mise en œuvre est définitivement différente. Parce que le système auquel j'ai participé envoie des messages, la phrase la plus principale est:
usersocketvo.getwebsocketSession (). SendMessage (Remontage);
Envoyez notre message via la méthode SendMessage de WebSocketSession. De plus, il s'agit principalement de la mise en œuvre du backend. Quant à la mise en œuvre du frontend, parce que je suis un programmeur backend, je prête plus d'attention au backend, donc je ne présenterai pas le frontend. Vous pouvez vérifier les informations en ligne par vous-même. Enfin, lorsque j'ai déjà cherché des documents d'étude, j'ai constaté que le style d'écriture de mon collègue était presque le même qu'un article. Je pense que le collègue aurait dû référencer cet article, il est donc répertorié ci-dessous et compté comme du matériel de référence.