国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

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~


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 封丘县| 英吉沙县| 济阳县| 罗定市| 毕节市| 山阴县| 黔江区| 乌拉特前旗| 长治市| 施甸县| 家居| 福安市| 霞浦县| 蒙山县| 福安市| 朝阳县| 河东区| 乌鲁木齐县| 扶绥县| 望城县| 芜湖市| 三原县| 河北省| 河曲县| 叙永县| 沐川县| 阜城县| 台中县| 曲麻莱县| 大埔县| 彰武县| 灯塔市| 固阳县| 固原市| 渝中区| 金乡县| 永靖县| 大名县| 综艺| 白朗县| 泾源县|