转载地址: 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>