#java #spring-boot #socket.io
#java #весенняя загрузка #socket.io
Вопрос:
Я разрабатываю приложение spring boot с реализацией сервера ввода-вывода сокетов для связи с клиентом. Мое намерение состоит в том, чтобы отправить одно push-уведомление с сервера клиенту в определенной функции. Как мне сделать это возможным? Мне нужно запустить событие отправки в отдельном классе обслуживания.
Класс реализации ввода-вывода сокета
@Configuration
public class Socket {
@Value("${socket.io.ip}")
private String hostIP;
@Value("${socket.io.port}")
private int hostPort;
@Bean
public void setupSocketServer() {
Configuration config = new Configuration();
config.setHostname(hostIP);
config.setPort(hostPort);
SocketIOServer socketServer = new SocketIOServer(config);
socketServer.addEventListener("chat", ChatObject.class, new DataListener<ChatObject>() {
@Override
public void onData(final SocketIOClient client, ChatObject data, final AckRequest ackRequest) {
// check is ack requested by client,
// but it's not required check
if (ackRequest.isAckRequested()) {
// send ack response with data to client
ackRequest.sendAckData("client message was delivered to server!", "yeah!");
}
// send message back to client with ack callback WITH data
ChatObject ackChatObjectData = new ChatObject(data.getUserName(), "message with ack data");
client.sendEvent("chatResponse1", new AckCallback<String>(String.class) {
@Override
public void onSuccess(String result) {
System.out.println("ack from client: " client.getSessionId() " data: " result);
}
}, ackChatObjectData);
}
});
socketServer.start();
}
}
Класс обслуживания
class userService{
void sendnotification(msg){
// need to call sendEvent function here
}
}
Ответ №1:
Я добился этого, используя UUID клиента сокета. Создан клиент сокета с использованием UUID, который сохраняется при подключении нового клиента к серверу. И повторно использовал его везде, где хотел.
SocketIOClient client = socketServer.getClient(uuid);