初步接触socketIO服务

一、配置socketIO服务

@Component
public class Server {
    
    @Value("${wss.server.host}")//socket服务地址
    private String host;
    @Value("${wss.server.port}")//socket服务端口
    private Integer port;
    @Bean
    private SocketIOServer socketIOServer() {
        Configuration config = new Configuration();
        config.setHostname(host);
        config.setPort(port);
        final SocketIOServer server = new SocketIOServer(config);  
        return server;
    }
    @Bean
    private SpringAnnotationScanner springAnnotationScanner(SocketIOServer socketServer) {  
        return new SpringAnnotationScanner(socketServer);
    }
    
}

配置好服务之后需要启动
二、启动socketIO服务

@Component
public class ServerRunner implements CommandLineRunner {
    private final LogHandler logger = new LogHandler(this.getClass().getName());
    private final SocketIOServer server;
    @Autowired 
    public ServerRunner(SocketIOServer server) {  
        this.server = server;  
    }
    @Override
    public void run(String... args) throws Exception {
        logger.info("~~~~socket-IO  server启动~~~~");
        server.start();
    }
}

这样socketIO的服务就已经启动
三、socketio消息交互

@EnableScheduling
@Component
public class MessageEventHandler {
    //客户端存储
    private static List<SocketIOClient> clients = new ArrayList<SocketIOClient>();// 用于保存所有客户端
    private final LogHandler logger = new LogHandler(this.getClass().getName());
    @Autowired
    private IStateDisplayService displayService;

    //添加connect事件,当客户端发起连接时调用
    @OnConnect
    private void messageHandler(SocketIOClient client) {
        logger.info("connected:SessionId=" + client.getSessionId());
        //存储监听到的客户端
        clients.add(client);
    }

    /**
     * 向socket客户端发送消息
     *
     * @param resultMap
     */
    public void sendMsg(String key, Map<String, Object> resultMap) {
        clients.removeIf(client -> !client.isChannelOpen());//删除已断开的客户端
        for (SocketIOClient client : clients) {
            client.sendEvent(key, resultMap);//向客户端发送数据
        }
    }

    /**
     * 获取机器状态
     *以机器这个例子展示交互
     */
    @Scheduled(fixedRate = 10000)
    public void sendMachine() {
        Map<String, Object> resultMap = displayService.getMachineState();
        sendMsg("bvMachineState", resultMap);
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,584评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,183评论 19 139
  • 作者:詹聪聪 序言: 本人工作中需要用到flask-socketio,在学习英文文档时发现,flask-socke...
    Python中文社区阅读 14,377评论 6 39
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,170评论 6 342
  • 感受向下的联结感受联结一直向下,直达地球的中心 竖直向上延伸联结感受向上的联结 把向上的和向下的联结在心中融合起来...
    是雨彤呀阅读 1,724评论 0 1

友情链接更多精彩内容