En el ejemplo de la aplicación de integración de Spring Integration WebSocket (Parte 1), hemos implementado WebSocket, pero todavía hay una clase de implementación comercial principal que no se ha implementado. Aquí implementamos esta clase central de negocios. Debido a que el sistema en el que participé usa WebSocket para enviar mensajes, la implementación es cómo enviar mensajes.
7. Implementación de NewsListenerMpl
paquete 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.enumeration.platnewscatoryPe; com.lagou.platform.news.web.dao.ext.model.platnewsvo; import com.lagou.platform.news.web.dao.ext.model.searchcondition; import com.lagou.platform.news.web.quartz.iMpl.timingjob; import; com.lagou.platform.news.web.service.platnewsservice; import org.apache.commons.lang.stringutils; import org.json.simple.jsonarray; import org.json.simple.jsonObject; import og.quartz.*; import ore.quartz.impl.stscheduleruleruleruleruleruler; org.slf4j.logger; import org.slf4j.loggerFactory; import org.springframework.beans.factory.annotation.aUtowired; import org.springframework.stereotype.component; import og.springfrframwork java.util.date; import java.util.list; import java.util.concurrent.executorservice; import java.util.concurrent.executors;/*** @Description: implementación del oyente de mensajes en sitios*@Date: 16-3-7*/ @ComponentPublicP Hublic Clase NewsListenerNeRenNeRenRePLEPLS NEWSLISTEMENTERSINGER {LISTE STIGLING STIG { LoggerFactory.getLogger (NewsListenerImpl.Class); gson gson = new GsonBuilder (). SetDateFormat ("yyyyyy-mm-dd hh: mm: ss"). Create (); // hilo de hilo privado ejecutorservice ejecutorservice = ejecutors.newcachedthreadPool (); // tarea shatuler sf = neo StdschedulerFactory ();@autowiredprivate platNewsService PlatNewsService; @OverridePublic Void Afterperpersist (PlatNewsVo PlatNewsVo) {logger.info ("A escuchado un nuevo mensaje agregado. . . "); logger.info (" El nuevo mensaje es: "+gson.tojson (platNewsVo))); // Inicie el hilo if (null! = platNewsvo &&! stringUtils.isblank (platNewsvo.getCurNtooperatorMail ()) {// Si es un mensaje sin tiempo if (platnewsvo.getNewsstype () PlatNewScategoryType.timing_time.getCategoryId ()) {starttimingTask (platNewsVo); {logger.info ("presione un nuevo mensaje después de establecer una conexión WebSocket ..."); StartTimingTask (platNewsVo platNewsVo) {logger.info ("Iniciar la tarea de mensaje de empuje cronometrado ..."); Date TimingTime = platNewsVo.gettimingtime (); if (null == TimingTime) {Logger.info ("El tiempo de mensaje cronometrado es null."); Return;} "+DateUtil.Date2String (TimingTime)); JobDetail JobDetail = JobBuilder.NewJob (TimingJob.Class) .WithIdentity (platNewsVo.getCurRentoOperatorMail ()+" Mensaje cronometrado "+platnewsvo.getid ()," Mensaje de sitio "). Build (); // Pass the Parametersers JobDetail.getJobDatamap (). PUT ("PlatNewsService", PlatNewsService); JobDetail.getJobDatamap (). PUT ("UserEmail", PlatNewsVo.getCurNtooperatorAdemail ()); TRIGGR = TRIGGURILD.NEWTRIG disparador "+platNewsVo.getId ()," Mensaje en el sitio "). Startat (TimingTime) .WithSChedule (SimpleCheduleBuilder.SimpleChededule (). InteTerValInSeconds (0) // Time Interval.WithRepeatCount (0) // Repetido (0) // Número de repeticiones). {Scheduler Sched = Sf.getScheduler (); Sched.ScheduleJob (JobDetail, Trigger); if (! Sched.isshutdown ()) {Sched.Start ();}} Catch (SCROTULECECECTION E) {logger.info (E.ToString ());} logger.info (completa el setting del inicio del inicio de la inicio de la inicio. . . ");}/*** @Description: Push Thread después de establecer un enlace de WebSocket*/class AfterConnectionSableShisedTask implementa runnable {String Correo electrónico; public DaresphonnectionSableShishedTask (String Correo electrónico) {this.email = correos electrónicos;} @overridePublic void run () {logger.info (" Iniciar mensajes para el usuario: "+correo electrónico+" .... "); if (! StringUtils.isblank (correo electrónico)) {SearchCondition SearchCondition = new SearchCondition (); SearchCondition.SetOperatorEmail (correo electrónico); JSonArray JSonArray = new JsonArray (); para (PlatNeWSCategoryType Type: PlatNewScategoryType.Values ()) {SearchCondition.SetTypeId (type.getCategoryId ()); int count = platNewsService.CountPlatNewsByExample (SearchCondition); JsonObject Object = new JsonObject (); object.put ("name", type.name ()); object.put ("descripción", type.getDescription ()); objeto.put ("count", count); jsonarray.add (objeto);} if (null! = Jsonarray && jsonarray.size ()> 0) {UssersocketVoSocketVoChetvo = WssessionLocalcache.get (correo electrónico); textMessage remessage = new TextMessage (gson.tojson (jsonArray))); intente {if (null! = UsssockOockvo) {// Push Message Usersocketvo.getWebSocketSession (). SendMessage (recuerdo); // Actualizar el tiempo de empuje Usersocketvo.setLastSendTime (dateUtil.getNowDate ()); logger.info ("Complete presione el nuevo mensaje al usuario:"+UssODSocketvo.getUserEmail ()+". . . "");}}} Catch (ioException e) {logger.error (e.ToString ()); logger.info ("" Fallado de mensajes en el sitio ... "+e.ToString ());}}} logger.info (" End Push Mensaje a "+correo electrónico+" ... ");}}}}Esta clase es la implementación del negocio principal de WebSocket. Su certeza específica está relacionada con el negocio. Debido a diferentes negocios, la implementación es definitivamente diferente. Debido a que el sistema en el que participé es enviar mensajes, la oración más central es:
Usersocketvo.getWebSocketSession (). SendMessage (Remessage);
Envíe nuestro mensaje a través del método SendMessage de WebSocketSession. Además, esta es principalmente la implementación del backend. En cuanto a la implementación de la interfaz, porque soy un programador de backend, presto más atención al backend, por lo que no presentaré el frontend. Puede consultar la información en línea usted mismo. Finalmente, cuando busqué algunos materiales de estudio antes, descubrí que el estilo de escritura de mi colega era casi el mismo que un artículo. Creo que el colega debería haber hecho referencia a este artículo, por lo que se enumera a continuación y se cuenta como materiales de referencia.