spring boot 에 netty socket. io 통합
5170 단어 2.JavaWeb
pom. xml 에 의존 도 를 추가 합 니 다.
com.corundumstudio.socketio
netty-socketio
1.7.11
프로그램 애플 리 케 이 션 의 입구 에 socketio 시작 코드 를 추가 합 니 다.
import com.corundumstudio.socketio.SocketIOServer;
import com.corundumstudio.socketio.annotation.SpringAnnotationScanner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class BuyLogApplication {
public static void main(String[] args) {
SpringApplication.run(BuyLogApplication.class, args);
}
@Bean
public SocketIOServer socketIOServer() {
com.corundumstudio.socketio.Configuration config = new com.corundumstudio.socketio.Configuration();
String os = System.getProperty("os.name");
if(os.toLowerCase().startsWith("win")){ // window localhost
System.out.println("this is windows");
config.setHostname("localhost");
} else {
config.setHostname("123.123.111.222"); // ip
}
config.setPort(9092);
/*config.setAuthorizationListener(new AuthorizationListener() {//
@Override
public boolean isAuthorized(HandshakeData data) {
//http://localhost:8081?username=test&password=test
// connect, ,
// String username = data.getSingleUrlParam("username");
// String password = data.getSingleUrlParam("password");
return true;
}
});*/
final SocketIOServer server = new SocketIOServer(config);
return server;
}
@Bean
public SpringAnnotationScanner springAnnotationScanner(SocketIOServer socketServer) {
return new SpringAnnotationScanner(socketServer);
}
}
세 가지 유형 을 넣다
import com.corundumstudio.socketio.SocketIOServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
@Component
@Order(value=1)
public class MyCommandLineRunner implements CommandLineRunner {
private final SocketIOServer server;
@Autowired
public MyCommandLineRunner(SocketIOServer server) {
this.server = server;
}
@Override
public void run(String... args) throws Exception {
server.start();
System.out.println("socket.io !");
}
}
class MessageInfo {
String MsgContent;
public String getMsgContent() {
return MsgContent;
}
public void setMsgContent(String msgContent) {
MsgContent = msgContent;
}
}
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.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.UUID;
@Component
public class MessageEventHandler {
public static SocketIOServer socketIoServer;
static ArrayList listClient = new ArrayList<>();
static final int limitSeconds = 60;
@Autowired
public MessageEventHandler(SocketIOServer server) {
this.socketIoServer = server;
}
@OnConnect
public void onConnect(SocketIOClient client) {
listClient.add(client.getSessionId());
System.out.println(" :" + client.getSessionId() + " ");
}
@OnDisconnect
public void onDisconnect(SocketIOClient client) {
System.out.println(" :" + client.getSessionId() + " ");
}
@OnEvent(value = "messageevent")
public void onEvent(SocketIOClient client, AckRequest request, MessageInfo data) {
System.out.println(" :" + data.getMsgContent());
socketIoServer.getClient(client.getSessionId()).sendEvent("messageevent", "back data");
}
public static void sendBuyLogEvent() { //
String dateTime = new DateTime().toString("hh:mm:ss");
for (UUID clientId : listClient) {
if (socketIoServer.getClient(clientId) == null) continue;
socketIoServer.getClient(clientId).sendEvent("enewbuy", dateTime, 1);
}
}
뒤쪽 이 바로 백 엔 드 입 니 다. Message EventHandler 를 통 해 클 라 이언 트 에 게 메 시 지 를 보 냈 습 니 다.
클 라 이언 트 html
인용
js 파일 https://socket.io/ 다운로드 하 다.
그리고 js 메시지 송 수신 코드 를 쓰 세 요.