Spring Boot 集成 WebSocket 实例 | 前端持续打印远程日志文件更新内容(模拟 tail 命令)
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.concurrent.atomic.AtomicLong;
@Controller
@RequestMapping("/logs")
public class LogController {
private static final AtomicLong userCounter = new AtomicLong();
@GetMapping("/stream")
public SseEmitter streamLog() {
SseEmitter emitter = new SseEmitter();
// 在新线程中运行日志读取逻辑
new Thread(() -> {
try {
BufferedReader reader = Files.newBufferedReader(Paths.get("/path/to/logfile.log"));
String line;
while ((line = reader.readLine()) != null) {
emitter.send(line); // 发送日志行到客户端
}
emitter.complete();
} catch (IOException e) {
emitter.completeWithError(e);
}
}).start();
return emitter;
}
}
这个简化的代码示例展示了如何在Spring Boot应用程序中实现类似的日志文件实时流式传输功能。它使用了SseEmitter
来创建服务器发送事件,在一个独立的线程中持续读取日志文件,并将新的日志行发送到客户端。这个例子假设你已经有了一个日志文件的路径,并且服务器有足够的权限去读取这个文件。
评论已关闭