IT袋

当前位置:主页 > 经验教程 > 建站编程 >

websocket入门教程

websocket入门教程(3)

时间:2023-11-09 14:35:16 来源:IT袋 作者:马勇
导读:websocket入门教程,【步骤五】: 定义WebSocket服务端组件 在 com.zbbmeta.websocket 包下创建 WebSocketServer 服务组件类 package com.zbbmeta.websocket;import org.springframework.stereotype.Component;imp

websocket入门教程

【步骤五】: 定义WebSocket服务端组件

com.zbbmeta.websocket包下创建WebSocketServer服务组件类

package com.zbbmeta.websocket;
import org.springframework.stereotype.Component;
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 java.util.Collection;
import java.util.HashMap;
import java.util.Map;
/**
 * @author springboot葵花宝典
 * @description: TODO
 */
@Component
@ServerEndpoint("/ws/{sid}")
public class WebSocketServer {
    //存放会话对象
    private static Map<String, Session> sessionMap = new HashMap();
    /**
     * 连接建立成功调用的方法
     */
    @OnOpen
    public void onOpen(Session session, @PathParam("sid") String sid) {
        System.out.println("客户端:" + sid + "建立连接");
        sessionMap.put(sid, session);
    }
    /**
     * 收到客户端消息后调用的方法
     *
     * @param message 客户端发送过来的消息
     */
    @OnMessage
    public void onMessage(String message, @PathParam("sid") String sid) {
        System.out.println("收到来自客户端:" + sid + "的信息:" + message);
    }
    /**
     * 连接关闭调用的方法
     *
     * @param sid
     */
    @OnClose
    public void onClose(@PathParam("sid") String sid) {
        System.out.println("连接断开:" + sid);
        sessionMap.remove(sid);
    }
    /**
     * 群发
     *
     * @param message
     */
    public void sendToAllClient(String message) {
        Collection<Session> sessions = sessionMap.values();
        for (Session session : sessions) {
            try {
                //服务器向客户端发送消息
                session.getBasicRemote().sendText(message);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
【步骤六】: 定义配置类,注册WebSocket的服务端组件

com.zbbmeta.config包下,创建WebSocketConfiguration配置类

package com.zbbmeta.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
/**
 * @author IT袋网
 * @description: TODO
 */
@Configuration
public class WebSocketConfiguration {
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }
}
【步骤七】: 定义定时任务类,定时向所有客户端推送数据

com.zbbmeta.task包下,创建WebSocketTask类,使用Spring-Task进行定时发送

package com.zbbmeta.task;
import com.zbbmeta.websocket.WebSocketServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
 * @author springboot葵花宝典
 * @description: TODO
 */
@Component
public class WebSocketTask {
    @Autowired
    private WebSocketServer webSocketServer;
    /**
     * 通过WebSocket每隔5秒向客户端发送消息
     */
    @Scheduled(cron = "0/5 * * * * ?")
    public void sendMessageToClient() {
        webSocketServer.sendToAllClient("这是来自服务端的消息:" + DateTimeFormatter.ofPattern("HH:mm:ss").format(LocalDateTime.now()));
    }
}

相关阅读

  • 个人免费建网站怎么建 创建网站免费注册

    个人免费建网站怎么建 创建网站免费注册

    关于这方面的知识你知道吗?个人免费建网站怎么建和创建网站免费注册的相关知识,具体介绍如下: 如今,人们仍然对互联网技术相当感兴趣,特别是许多人希望成为网络名人,或者通过互

  • kafka应用场景有哪些

    kafka应用场景有哪些

    全面的为大家介绍kafka应用场景有哪些的相关介绍,下面为详细的介绍。 Kafka 作为一款热门的消息队列中间件,具备高效可靠的消息异步传递机制,主要用于不同系统间的数据交流和传递。 下

  • zblogphp后台固定域名导致网站无法访问解决方法

    zblogphp后台固定域名导致网站无法访问解决方法

    zblog后台设置固定域名之后,有时候服务器证书到期了或者更换了域名就导致网站无法正常访问了,连后台也打不开,进不去 ,针对这个问题,下面IT袋小编就给各位网站长分享解决方法,希望

  • 免费建立自己的网站 建立个人免费网站的方法

    免费建立自己的网站 建立个人免费网站的方法

    今日重点为您介绍免费建立自己的网站和建立个人免费网站的方法方面的介绍,接下来IT袋带大家一起了解。 现在个人成立工作室、工作团队,或者做个人自媒体的越来越多,这就需要有一个