亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

springboot+websocket+sockjs進行消息推送

2019-11-14 10:29:20
字體:
來源:轉載
供稿:網友

一,消息推送的服務端

1.創建簡單的sPRingboot工程。pom配置如下:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>org.springframework</groupId>    <artifactId>gs-messaging-stomp-websocket</artifactId>    <version>0.1.0</version>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>1.4.2.RELEASE</version>    </parent>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>            <exclusions>                <exclusion>                    <groupId>org.springframework.boot</groupId>                    <artifactId>spring-boot-starter-tomcat</artifactId>                </exclusion>            </exclusions>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-jetty</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-websocket</artifactId>           <exclusions>                <exclusion>                    <groupId>org.springframework.boot</groupId>                    <artifactId>spring-boot-starter-web</artifactId>                </exclusion>            </exclusions>         </dependency>        <dependency>            <groupId>org.webjars</groupId>            <artifactId>webjars-locator</artifactId>        </dependency>        <dependency>            <groupId>org.webjars</groupId>            <artifactId>sockjs-client</artifactId>            <version>1.0.2</version>        </dependency>        <dependency>            <groupId>org.webjars</groupId>            <artifactId>stomp-websocket</artifactId>            <version>2.3.3</version>        </dependency>        <dependency>            <groupId>org.webjars</groupId>            <artifactId>bootstrap</artifactId>            <version>3.3.7</version>        </dependency>        <dependency>            <groupId>org.webjars</groupId>            <artifactId>jquery</artifactId>            <version>3.1.0</version>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-actuator</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>    </dependencies>    <properties>        <java.version>1.8</java.version>    </properties>    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build></project>去掉了默認的tomcat,采用jetty

2.采用stomp消息格式,定義接收的消息和發送的消息bean

客戶端發送的消息

package hello;public class Greeting {    private String content;    public Greeting() {    }    public Greeting(String content) {        this.content = content;    }    public String getContent() {        return content;    }}服務器發送給客戶端的消息

package hello;public class HelloMessage {    private String name;    public HelloMessage() {    }    public HelloMessage(String name) {        this.name = name;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}3,消息處理handler

package hello;import org.springframework.messaging.handler.annotation.MessageMapping;import org.springframework.messaging.handler.annotation.SendTo;import org.springframework.stereotype.Controller;@Controllerpublic class GreetingController {    @MessageMapping("/hello")    @SendTo("/topic/greetings")    public Greeting greeting(HelloMessage message) throws Exception {        Thread.sleep(1000); // simulated delay        return new Greeting("Hello, " + message.getName() + "!");    }}

4對websocket類進行配置

package hello;import org.springframework.context.annotation.Configuration;import org.springframework.messaging.simp.config.MessageBrokerRegistry;import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;import org.springframework.web.socket.config.annotation.StompEndpointRegistry;@Configuration@EnableWebSocketMessageBrokerpublic class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {    @Override    public void configureMessageBroker(MessageBrokerRegistry config) {        config.enableSimpleBroker("/topic");        config.setapplicationDestinationPrefixes("/app");    }    @Override    public void registerStompEndpoints(StompEndpointRegistry registry) {        registry.addEndpoint("/gs-guide-websocket").withSockJS();    }}

創建客戶端app.js和index.html

app.js文件如下:

var stompClient = null;function setConnected(connected) {    $("#connect").prop("disabled", connected);    $("#disconnect").prop("disabled", !connected);    if (connected) {        $("#conversation").show();    }    else {        $("#conversation").hide();    }    $("#greetings").html("");}function connect() {    var socket = new SockJS('/gs-guide-websocket');    stompClient = Stomp.over(socket);    stompClient.connect({}, function (frame) {        setConnected(true);        console.log('Connected: ' + frame);        stompClient.subscribe('/topic/greetings', function (greeting) {            showGreeting(JSON.parse(greeting.body).content);        });    });}function disconnect() {    if (stompClient != null) {        stompClient.disconnect();    }    setConnected(false);    console.log("Disconnected");}function sendName() {    stompClient.send("/app/hello", {}, JSON.stringify({'name': $("#name").val()}));}function showGreeting(message) {    $("#greetings").append("<tr><td>" + message + "</td></tr>");}$(function () {    $("form").on('submit', function (e) {        e.preventDefault();    });    $( "#connect" ).click(function() { connect(); });    $( "#disconnect" ).click(function() { disconnect(); });    $( "#send" ).click(function() { sendName(); });});

點解connect即與服務器建立連接,在輸入框輸入任何消息,點擊send,發送給服務器,會獲得服務器的響應,

三、服務器主動發消息給客戶端

服務器主動發消息給客戶端通過

最后,服務器主動發消息給客戶端

通過SimpleMessagingTemplate類實現

@RestControllerpublic%20class%20TestController%20{%20%20%20%20@Autowired%20%20%20%20private%20SimpMessagingTemplate%20template;%20%20%20%20@RequestMapping(value%20=%20"/test",method%20=%20RequestMethod.GET)%20%20%20%20public%20String%20test(){%20%20%20%20%20%20%20%20template.convertAndSend("/topic/greetings",new%20Greeting("hello"));%20%20%20%20%20%20%20%20return%20"hello";%20%20%20%20}}

調用http://localhost:8080/test,會看到消息發給了客戶端

以上就是對springboot服務端進行消息推送的大致介紹。不過目前似乎消息推送系統go或nodejs版本很流行。nodejs+socketio. java服務端可以調用消息推送系統接口實現
消息發送到客戶端。歡迎討論。O(∩_∩)O~


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二区三区在线播放免费观看| 日韩av免费在线看| 亚洲国产精品久久精品怡红院| 久久免费视频在线观看| 精品香蕉在线观看视频一| 国外成人免费在线播放| 亚洲性日韩精品一区二区| 91在线免费看网站| 7777精品视频| 国产视频在线观看一区二区| 最近的2019中文字幕免费一页| 97精品国产91久久久久久| 日韩www在线| 久久精品99久久久久久久久| 日韩精品视频免费专区在线播放| 日韩高清av一区二区三区| 久久精品成人欧美大片| 日韩精品免费在线视频观看| 日韩欧中文字幕| 亚洲成人网av| 久久久极品av| 精品久久香蕉国产线看观看gif| 国产999视频| 欧美成aaa人片免费看| 欧美日韩一二三四五区| 91精品国产综合久久男男| 国产在线拍揄自揄视频不卡99| 综合av色偷偷网| 538国产精品一区二区免费视频| 日韩小视频网址| 91av在线看| 97视频免费在线观看| 欧美在线一级va免费观看| 久久久久久av| 国产精品久久久久久久久久新婚| 欧美日韩国产中字| 久国内精品在线| 午夜精品久久17c| 97在线视频观看| 久久久久久免费精品| 日韩欧美精品在线观看| 日韩免费中文字幕| 久久免费国产视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 中文字幕精品一区二区精品| 久久夜色精品亚洲噜噜国产mv| 欧美美女操人视频| 欧美激情视频网址| 在线看福利67194| 欧美激情2020午夜免费观看| 欧美日产国产成人免费图片| 懂色av一区二区三区| 欧美夫妻性生活xx| 亚洲一区亚洲二区亚洲三区| 日韩黄在线观看| 久久综合久久美利坚合众国| 亚洲欧美激情四射在线日| 国产日韩欧美日韩大片| 亚洲国产高清自拍| 国产精品国产三级国产aⅴ浪潮| 77777亚洲午夜久久多人| 久久精品91久久香蕉加勒比| 亚洲视频欧美视频| 欧美日韩在线免费观看| 亚洲午夜小视频| 在线观看日韩欧美| 国产精品美女久久久久久免费| 日韩精品视频在线| 成人性生交大片免费看视频直播| 久青草国产97香蕉在线视频| 欧美大肥婆大肥bbbbb| 中文字幕精品在线| 亚洲欧美国产精品va在线观看| 国产日本欧美一区二区三区| 91精品国产91久久久| 久久香蕉国产线看观看网| 亚洲欧美日韩精品久久| 国产欧美一区二区三区在线| 午夜精品久久久久久99热| 成人av在线网址| 国产69精品久久久久99| 欧美电影在线播放| 一区二区三区四区精品| 久久久免费在线观看| 久久久国产精品视频| 米奇精品一区二区三区在线观看| 日韩av免费观影| 精品久久久久久久久久久久久久| 日本欧美一级片| xvideos亚洲人网站| 精品国产鲁一鲁一区二区张丽| 国产999精品久久久影片官网| 亚洲综合中文字幕在线观看| 91免费福利视频| 91美女片黄在线观| 最好看的2019的中文字幕视频| 欧美成人精品不卡视频在线观看| 国内精品视频久久| 性色av一区二区三区免费| 亚洲第一天堂无码专区| 国产精品一区二区3区| 一本色道久久88综合亚洲精品ⅰ| 日本欧美一级片| 26uuu日韩精品一区二区| 亚洲人成在线观| 欧美精品久久久久久久| 欧美日韩成人在线观看| 欧美色videos| 亚洲免费av片| 91chinesevideo永久地址| 欧美老女人性生活| 亚洲精品中文字幕女同| 人人爽久久涩噜噜噜网站| 欧美性猛交xxxx乱大交蜜桃| 欧美成人黄色小视频| 国产精品久久电影观看| 伊人亚洲福利一区二区三区| 日韩中文字幕免费视频| 欧美老少配视频| 日韩欧美一区二区在线| 色偷偷9999www| 97香蕉久久超级碰碰高清版| 成人黄色片网站| 久久99精品久久久久久青青91| 欧美激情亚洲自拍| 欧美中文字幕视频在线观看| 黑人巨大精品欧美一区二区三区| 欧美国产亚洲精品久久久8v| 国产91精品最新在线播放| 成人黄色在线免费| 国产欧美日韩视频| 最近2019好看的中文字幕免费| 欧美天天综合色影久久精品| www.色综合| 久久久免费高清电视剧观看| 国产一区二区三区在线观看视频| 韩国日本不卡在线| 久久综合久久美利坚合众国| 日韩av在线一区| 中文字幕日韩专区| 中日韩美女免费视频网址在线观看| 日本19禁啪啪免费观看www| 久久精品成人动漫| 97精品视频在线观看| 亚洲a在线观看| 自拍偷拍亚洲一区| 日韩视频免费大全中文字幕| 国语自产精品视频在线看一大j8| 91在线色戒在线| 欧美中文字幕在线观看| 色综合久久88色综合天天看泰| 久久精品99久久香蕉国产色戒| 日本高清不卡在线| 91福利视频网| 欧美性xxxxxx| 国产精品96久久久久久又黄又硬| 国产精品亚洲аv天堂网| 亚洲成人999| 国产福利视频一区| 色妞久久福利网| 91久久久久久久久久久| 色噜噜国产精品视频一区二区| 91产国在线观看动作片喷水| 国产一区二区丝袜高跟鞋图片|