В примере приложения интеграции интеграции Spring Integration (часть 1) мы реализовали WebSocket, но все еще существует основной класс реализации бизнеса, который не был реализован. Здесь мы внедряем этот бизнес -класс. Поскольку система, в которой я участвовал, использует WebSocket для отправки сообщений, реализация заключается в том, как отправлять сообщения.
7. Реализация NewsListenerImpl
Пакет cn.bridgeli.websocket; import com.google.gson.gson; import com.google.gson.gsonbuilder; import com.lagou.common.base.util.date.dateutil; импорт com.lagou.platform.news.api.enumeration.platnewscategepe; com.lagou.platform.news.web.dao.ext.model.platnewsvo; import com.lagou.platform.news.web.dao.ext.model.searchcondition; импорт com.lagou.platform.news.web.quartz.impl.imlingjob; import com.lagou.platform.news.web.service.platnewsservice; импорт org.apache.commons.lang.stringutils; импорт org.json.simple.jsonarray; импорт org.json.simple.jsonobject; импорт org.quartz. org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotype.component; import.ioMemp. java.util.list; import java.util.concurrent.executorservice; import java.util.concurrent.executors;/*** @description: реализация прослушивателя сообщений. Loggerfactory.getlogger (newslistenerimpl.class); gson gson = new gsonbuilder (). SetDateformat ("yyyy-mm-dd hh: mm: ss"). Create (); // press prest executorerservice = experators.newcachedthreadpool () ;// Заполняющий seductory speerportory spearmory spedupory spedupory spedupory spadorcrieceer executorerservice = experators.newcachedthreadpool (); Stdschedulerfactory ();@autowiredprivate platnewsservice platnewsservice; @OverridePublic void Afterpersist (Platnewsvo Platnewsvo) {logger.info (»выслушал новое сообщение. Полем Полем "); logger.info (« Новое сообщение: »+gson.tojson (platnewsvo)); // запустить поток if (null! PlatNewScateyType.timing_Time.getCategoryId ()) {startTimingTask (platnewsvo); Электронная почта) {logger.info («Нажмите новое сообщение после установления соединения WebSocket ...»); StarttimingTask (Platnewsvo platnewsvo) {logger.info («Запустите задачу времени push push ...»); дата времени времени = platnewsvo.gettimingtime (); if (null == timingtime) {logger.info («время задачи» - null ».) «+DateUtil.date2string (время времени)); jobdetail jobdetail = jobbuilder.newjob (timingjob.class). Withidentity (platnewsvo.getCurrentOooperatoremail ()+« временное сообщение »+platnewsvo.getid (),« сайт -сайт »). jobdetail.getJobdatamap (). Put ("platnewsservice", platnewsservice); jobdetail.getJobdatamap (). Put ("user -ulemail", platnewsvo.getCurrentOooperatoremail ()); Trigger Trigger = TriggerBuilder.newTrigger (). Триггер "+platnewsvo.getid ()," message "). startat (время времени). Withschedule (simpleschedulebuilder.simpleschedule (). vintervalinseconds (0) // Время времени. {Планировать chade = sf.getscheduler (); shard.schedulejob (jobdetail, trigger); if (! Share.isshutdown ()) {share.start ();}} catch (shareuleRexception e) {logger.info (e.toString ()); Полем Полем ");}/*** @Description: push -поток после создания ссылки WebSocket*/class effconnectionEstabletask реализует runnable {string email; public confoConceSectableSitedTask (string email) {this.email = email;} @overpublic void run () {logger.info (" employ pus "+Email+" .... "); if (! stringUtils.isblank (email)) {searchCondition searchCondition = new SearchCondition (); searchCondition.setOperatorEmail (email); jsonarray jsonarray = new jsonarray (); PlatNewScategoryType.values ()) {searchCondition.setTypeid (type.getCategoryId ()); int count = platnewsservice.countplatnewsbyexample (search -condition); jsonobject obj Jsonobject (); object.put ("name", type.name ()); object.put ("description", type.getDescription ()); object.put ("count", count); jsonarray.add (object);} if (null! Wssessionlocalcache.get (email); textmessage remessage = new Textmessage (gson.tojson (jsonarray)); try {if (null! = UsersockeChocto) {// push message usersocketockeocke.getwebsocketsessessessessessessessessessessest (). usersoctockevo.setlastsendtime (dateutil.getnowdate ()); logger.info («Пополните новое сообщение пользователю:«+usersockecketvo.getuseremail ()+». Полем Полем ");}} catch (ioException e) {logger.error (e.toString ()); logger.info (" in sace overse ... "+e.toString ());}}} logger.info (" End Push-сообщение на "+email+" ....);}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}Этот класс является реализацией основного бизнеса WebSocket. Его конкретная уверенность связана с бизнесом. Из -за другого бизнеса реализация определенно отличается. Поскольку система, в которой я участвовал, отправляет сообщения, самое основное предложение:
usersoctockevo.getwebsocketsession (). sendmessage (remessage);
Отправьте наше сообщение через метод SendMessage WebSocketSession. Кроме того, это в основном реализация бэкэнда. Что касается реализации Frondend, потому что я являюсь программистом Backend, я уделяю больше внимания на бэкэнд, поэтому я не буду представлять Frontend. Вы можете проверить информацию онлайн самостоятельно. Наконец, когда я искал некоторые учебные материалы раньше, я обнаружил, что стиль написания моего коллеги почти таким же, как статья. Я думаю, что коллега должен был ссылаться на эту статью, поэтому она указана ниже и считается справочными материалами.