Spring Boot +WebSocket

后台配置文件

package com.keyten.commons.config;

import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArraySet;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;

import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;


@ServerEndpoint(value = "/websocket/{fuserid}")
@Component
public class MyWebSocket {

    private static CopyOnWriteArraySet<MyWebSocket> webSocketSet = new CopyOnWriteArraySet<MyWebSocket>(); 

    private Session session;                                        

    private Integer fuserid;                                       

    @OnOpen
    public void onOpen(Session session, @PathParam(value = "fuserid") Integer fuserid) {
            this.session = session;                                 
            this.fuserid = fuserid;
            MyWebSocket _this = getcurrentWenSocket(this.fuserid);    
            webSocketSet.add(this);                                 
    }

    @OnClose
    public void onClose() {
        boolean b = webSocketSet.remove(this);                     
    }

    @OnMessage
    public void onMessage(String message, Session session) {
        try {
            MyWebSocket _this = null;
            for (MyWebSocket item : webSocketSet) {
                if(item.session.getId() == session.getId()){
                    _this = item;
                }
            }
            if(_this == null){
                this.sendMessage("未连接不能发送消息!");
                return;
            }
            this.sendMessage("来自服务端的消息: <已读> " + message);
        } catch (IOException e) {
        }
    }

    public static MyWebSocket getcurrentWenSocket(Integer fuserid){
        if(fuserid == null || fuserid < 1 || webSocketSet == null || webSocketSet.size() < 1){
            return null;
        }
        Iterator<MyWebSocket> iterator = webSocketSet.iterator();
        while (iterator.hasNext()) {
            MyWebSocket _this = iterator.next();
            if(_this.fuserid == fuserid){
                return _this;
            }
        }
        return null;
    }

    public void sendMessage(String message) throws IOException {
        this.session.getBasicRemote().sendText(message);
    }

    public static void sendMessage(Integer fuserid,String message){
        try {
            if(fuserid == null || fuserid < 1 || StringUtils.isBlank(message)){
                return;
            }
            MyWebSocket _this = getcurrentWenSocket(fuserid);
            if(_this == null){
                return;
            }
            _this.sendMessage(message);
        } catch (IOException e) {
            System.out.println("发送消息异常!");
        }
    }

    public static void sendMessageList(List<Integer> fuseridList, String message){
        try{
            if(fuseridList == null || fuseridList.size() < 1 || StringUtils.isBlank(message)){
                return;
            }
            for (Integer fuserid : fuseridList) {
                MyWebSocket _this = getcurrentWenSocket(fuserid);
                if(_this == null){
                    continue;
                }
                _this.sendMessage(message);
            }
        }catch(Exception e){
        }
    }

    public static void sendMessageAll(String message) {
        try {
            if(webSocketSet == null || webSocketSet.size() < 1 || StringUtils.isBlank(message)){
                return;
            }
            for (MyWebSocket item : webSocketSet) {
                item.sendMessage(message);
            }
        } catch (IOException e) {
        }
    }

}
 

内置TomCat(如果用外置可忽略) 

/** 
 * @Author 老王
 * @Description:
 * @Date 2019年2月18日 上午8:56:38
 */
package com.keyten.commons.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

/**
 * @Author 老王
 * @Description:
 * @Date 2019年2月18日 上午8:56:38
 */

@Configuration
public class WebSocketConfig {
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }
}
 

 js部分

var websocket = null;

if ('WebSocket' in window) {
    websocket = new WebSocket("ws://127.0.0.1:8080/websocket/1");
} else {
    alert('Not support websocket')
}
websocket.onmessage = function(event) {
    setMessageInnerHTML(event.data);
}

window.onbeforeunload = function() {
    websocket.close();
}

function setMessageInnerHTML(datas) {
    var innerHTML = $.parseJSON(datas);
    var title = innerHTML.title;
    $("#s1").html(title.substring(0,45));
    var creator = innerHTML.creator;
    $("#s6").html('作者:'+creator);
    var addtime = innerHTML.addtime;
    $("#s7").html('时间:'+addtime);
     show();
    var timesRun = 0;
    var interval = setInterval(function(){
        timesRun += 1;
        if(timesRun == 5){    
            clearInterval(interval);    
        }
        show();
    }, 25000);

}

function closeWebSocket() {
    websocket.close();
}

 后台接口正常访问即可

Spring-Boot WebSocket 可以实现向日葵远程控制。向日葵是一款远程控制软件,可以让我们在远程控制设备时更加方便和灵活。在使用Spring-Boot实现WebSocket时,我们可以结合向日葵的API来达到远程控制的目的。 首先,在Spring-Boot中,我们需要引入WebSocket的依赖。可以在pom.xml文件中添加相应的依赖,例如: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 然后,我们需要创建WebSocket的配置类。在配置类中,我们可以定义WebSocket的相关设置,例如消息处理器、握手拦截器等。可以参考以下代码: ``` @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(myHandler(), "/myHandler").withSockJS(); } @Bean public WebSocketHandler myHandler() { return new MyHandler(); } } ``` 在以上代码中,`registerWebSocketHandlers` 方法用来注册WebSocket处理器,并指定了处理路径。`MyHandler` 是自定义的消息处理器,可以在其中处理接收到的消息、发送消息等。 接下来,我们可以在处理器中调用向日葵的API,实现远程控制的功能。例如: ``` public class MyHandler extends TextWebSocketHandler { @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { // 处理接收到的消息 String receivedMessage = message.getPayload(); // 调用向日葵API,实现远程控制 // 发送消息 String responseMessage = "远程控制成功"; session.sendMessage(new TextMessage(responseMessage)); } } ``` 在以上代码中,`handleTextMessage` 方法用来处理接收到的消息。我们可以在其中调用向日葵的API实现远程控制的逻辑,并将结果作为消息发送回客户端。 最后,在Spring-Boot的主类中添加 `@EnableWebSocket` 注解,启用WebSocket功能。 综上所述,通过Spring-Boot WebSocket,我们可以便捷地实现向日葵远程控制的功能。使用WebSocket协议进行通信,同时结合向日葵的API,可以让我们更加灵活地远程控制设备。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值