Dalam Contoh Aplikasi Integrasi Integrasi Spring Websocket (Bagian 1), kami telah mengimplementasikan Websocket, tetapi masih ada kelas implementasi bisnis inti yang belum diimplementasikan. Di sini kami mengimplementasikan kelas inti bisnis ini. Karena sistem yang saya ikuti dalam menggunakan WebSocket untuk mengirim pesan, implementasinya adalah cara mengirim pesan.
7. Implementasi NewsListenerMen
Paket 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.platnercscerccater 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.imbl.timing com.lagou.platform.news.web.service.platnewsservice; impor org.apache.commons.lang.stringutils; impor org.json.simple.jsonarray; impor org.json.simple.jsonobject; impor org.quartz.*; org.slf4j.logger; impor org.slf4j.loggerFactory; impor org.springframework.beans.factory.annotation.Autowired; impor org.springframework.stereotype.component; import org.springframework.weB.socket.scepet.sceTypon.texponent; Import org.springframework.weB.socket.scocket.sextypon.texponent. java.util.date; impor java.util.list; impor java.util.concurrent.executorservice; import java.util.concurrent.executors;/*** @description: Loomgerer Loomgerer LoOglImpl*@Date: 16-3-7*/ @componentpublic classenener Louplic*@Date: 16-3-7*/ @ComponentPublic Class Classenener LoggerFactory.getLogger (newslistenerImpl.class); gson gson = gsonbuilder baru (). SetDateFormat ("yyyy-mm-dd hh: mm: ss"). Create (); // thread pool private executorservice executorService = executors.newcachedthreadpool (); StdschedulerFactory ();@AutoWiriredPrivate PlatnewsService Platnewsservice; @Overridepublic void afterpersist (Platnewsvo Platnewsvo) {Logger.info ("Pesan baru ditambahkan. . . "); Logger.info (" Pesan baru adalah: "+gson.toJson (platnewsvo)); // Mulai utas jika (null! = Platnewsvo &&! Stringutils.isblank (Platnewsvo.getCurrentooperatoreMail ())) {// Jika itu adalah pesan timed IF (PlatnewsVo ()) {) jika itu adalah pesan timed IF (PlatnewsVo () {) jika itu adalah pesan timed IF (Platnewsvo () {) {) {) {Platnewsvo. PlatnewScategoryType.timing_time.getCategoryId ()) {startTimingTask (platnewsvo); email) {logger.info ("Dorong pesan baru setelah membuat koneksi WebSocket ..."); startTimingTask (platnewsvo platnewsvo) {logger.info ("Mulai tugas pesan push yang waktunya ..."); tanggal waktu = platnewsvo.gettimingtime (); if (null == timingtime) {logger.info ("waktu pesan waktu adalah null."); return; "+Dateutil.date2String (timingtime)); jobdetail jobdetail = jobbuilder.newjob (timingjob.class) .withlidentity (platnewsvo.getCurrentooperatoreMail ()+" pesan waktu "+PLATYNewSvo.getid ()," Situs "). jobdetail.getjobdatamap (). put ("platnewsservice", platnewsservice); jobdetail.getjobDatamap (). put ("useremail", platnewsvo.getCurrentooperatory (). TRIGGERGED trigger = triggerbuilder.newrigger (). Withinging ("trigger trigger = triggerbuilder.newrigger ()." Trigger trigger = triggerbuilder.newrigger (). "Trigger trigger = triggerbuilder.newrigger ()." Trigger trigger = triggerbuilder.newrigger (). "Trigger trigger = triggerbuilder.newrigger (). pemicu "+platnewsvo.getId ()," pesan dalam-situs "). startat (timingtime) .withschedule (simplesCheduleBuilder.simplesChedule (). Intervalinseconds (0) // interval waktu. {SCRECTERER SCRECTE = SF.GETSCHEDERER (); SCHART.SCHEDUREJOB (JobDetail, pemicu); if (! SCHED.ISSHUTDOWN ()) {SCHART.START ();}} Catch (DatederException E) {Logger.info (e.tostring ();} Logger. . . ");}/*** @Description : Push thread after establishing a websocket link */class AfterConnectionEstablishedTask implements Runnable{String email ;public AfterConnectionEstablishedTask(String email){this.email = email;}@Overridepublic void run() {logger.info("Start push messages to the user: "+Email+" .... "); if (! Stringutils.isblank (email)) {searchCondition searchCondition = new SearchCondition (); SearchCondition.setoperatoreMail (email); jsonarray jsonarray = new jsonArray (); untuk (platnewscategoryType tipe: PlatnewScategoryType.Values ()) {SearchCondition.SetTypeID (type.getCategoryId ()); int count = PlatnewsService.countplatNewsByExample (SearchCondition); JsonObject Object = Jsonobject (); object.put ("name", type.name ()); object.put ("description", type.getDescription ()); objek.put ("count", count); jsonarray.add (objek);} if (null! = Jsonarray && jsonarray.size ()> 0) {null! = Jsonarray && jsonarray.size ()> 0) {null! Wssessieslocalcache.get (email); TextMessage remessage = new TextMessage (gson.toJson (jsonarray)); coba {if (null! = Usersocketvo) {// Pusat pesan Usersocketvo.getWebSocketSession (). SendMessage (remessage); // Update Push Usersocketvo.setLastSendTime (dateutil.getnowDate ()); logger.info ("Lengkap push pesan baru kepada pengguna:"+userocketvo.getuseremail ()+". . . ");}} catch (ioException e) {logger.error (e.toString ()); logger.info (" Pesan di tempat gagal ... "+e.tostring ());}}}}}Kelas ini adalah implementasi bisnis inti Websocket. Kepastian spesifiknya terkait dengan bisnis. Karena bisnis yang berbeda, implementasinya jelas berbeda. Karena sistem tempat saya berpartisipasi adalah mengirim pesan, kalimat inti yang paling adalah:
userocketvo.getWebsocketsession (). sendMessage (remessage);
Kirim pesan kami melalui metode SendMessage dari WebSocketsession. Selain itu, ini terutama implementasi backend. Adapun implementasi frontend, karena saya seorang programmer backend, saya lebih memperhatikan backend, jadi saya tidak akan memperkenalkan frontend. Anda dapat memeriksa informasi sendiri secara online. Akhirnya, ketika saya mencari beberapa bahan belajar sebelumnya, saya menemukan bahwa gaya penulisan kolega saya hampir sama dengan artikel. Saya pikir kolega seharusnya merujuk artikel ini, jadi terdaftar di bawah ini dan dihitung sebagai bahan referensi.