Java -- springboot 配置 netty-socketio

轉載地址: https://www.cnblogs.com/pomer-huang/p/netty-socketio.html

1、pom 配置

<dependency>
  <groupId>com.corundumstudio.socketio</groupId>
  <artifactId>netty-socketio</artifactId>
  <version>1.7.17</version>
</dependency>

2、NettySocketio 配置類

package com.vim.common.config;

import com.corundumstudio.socketio.SocketIOServer;
import com.corundumstudio.socketio.annotation.SpringAnnotationScanner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class NettySocketioConfig {

    @Bean
    public SocketIOServer socketIOServer() {
        com.corundumstudio.socketio.Configuration config = new com.corundumstudio.socketio.Configuration();
        config.setHostname("localhost");
        config.setPort(9092);

        SocketIOServer server = new SocketIOServer(config);
        return server;
    }

    /**
     * 用於掃描netty-socketio的註解,比如 @OnConnect、@OnEvent
     */
    @Bean
    public SpringAnnotationScanner springAnnotationScanner() {
        return new SpringAnnotationScanner(socketIOServer());
    }
}

3、啓動類 Application

package com.vim;

import com.corundumstudio.socketio.SocketIOServer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;

@SpringBootApplication
public class Application extends SpringBootServletInitializer implements CommandLineRunner {

    @Autowired
    private SocketIOServer socketIOServer;
    private static final Logger logger = LoggerFactory.getLogger(Application.class);

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Application.class);
    }

    @Override
    public void run(String... args) throws Exception {
        socketIOServer.start();
        logger.info("socket.io啓動成功!");
    }
}

4、事件處理

package com.vim.modules.message;

import com.corundumstudio.socketio.AckRequest;
import com.corundumstudio.socketio.SocketIOClient;
import com.corundumstudio.socketio.SocketIOServer;
import com.corundumstudio.socketio.annotation.OnConnect;
import com.corundumstudio.socketio.annotation.OnDisconnect;
import com.corundumstudio.socketio.annotation.OnEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MessageEventHandler {

    @Autowired
    private SocketIOServer socketIoServer;

    @OnConnect
    public void onConnect(SocketIOClient client) {
        System.out.println("OnConnect: "+client.getHandshakeData().getSingleUrlParam("id"));
    }

    @OnDisconnect
    public void onDisconnect(SocketIOClient client) {
        System.out.println("onDisconnect: "+client.getSessionId());
    }

    @OnEvent(value = "simple")
    public void onEvent(SocketIOClient client, AckRequest request, Object data) {
        System.out.println(data);
        client.sendEvent("simple", "hello client");
    }
}

5、頁面處理

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1, maximum-scale=1, user-scalable=no">
    <title>websocket-java-socketio</title>
    <script src="https://cdn.bootcss.com/socket.io/2.2.0/socket.io.js"></script>
</head>
<body>
</body>

<script type="text/javascript">
    var socket = io.connect("http://localhost:9092?id=223232");

    //監聽服務器連接事件
    socket.on('connect', function(){ 
    	socket.emit('simple', "hello server");
    });
    //監聽服務器關閉服務事件
    socket.on('disconnect', function(){ 
    	
    });
    
    //監聽服務器端發送消息事件
    socket.on('simple', function(data) {
      alert(data)
    });
</script>
</html>

 

發佈了100 篇原創文章 · 獲贊 20 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章