适用版本:suretool ≥ 1.4.0 | JDK 25+ | 零第三方运行时依赖
import com.sure.tool.socket.SocketServer;
import com.sure.tool.socket.SocketUtil;
import java.nio.charset.StandardCharsets;
// port=0 自动分配端口;handler 每连接一个虚拟线程执行
SocketServer server = new SocketServer(0, socket -> {
String line = SocketUtil.readLine(socket, StandardCharsets.UTF_8);
SocketUtil.writeString(socket, "echo: " + line + "\n", StandardCharsets.UTF_8);
});
server.start();
int port = server.getPort();
import com.sure.tool.socket.SocketClient;
import java.nio.charset.StandardCharsets;
try (SocketClient client = new SocketClient("127.0.0.1", port)) {
client.sendString("hello suretool\n", StandardCharsets.UTF_8);
String resp = client.receiveLine(StandardCharsets.UTF_8); // "echo: hello suretool"
}
import com.sure.tool.socket.SocketUtil;
boolean up = SocketUtil.isReachable("10.0.0.1", 80, 3000); // 连接探测(带超时)
boolean free = SocketUtil.isPortAvailable(8080);
boolean inner = SocketUtil.isInnerIP("192.168.1.1"); // 内网判断
适用:轻量 RPC、内部 agent 通信、测试桩;高吞吐生产场景仍建议 Netty。
import com.sure.tool.event.EventBus;
EventBus bus = new EventBus();
var sub = bus.subscribe(OrderCreated.class, e -> System.out.println("订单: " + e.orderId()));
sub.cancel(); // 取消订阅
import com.sure.tool.event.EventBus;
import com.sure.tool.event.EventSubscribe;
public class OrderListener {
@EventSubscribe
public void onOrder(OrderCreated e) { /* 业务处理 */ }
}
EventBus bus = new EventBus();
bus.register(new OrderListener()); // 扫描 @EventSubscribe 方法
bus.post(new OrderCreated(1001L)); // 同步:调用方线程,有序可靠
bus.postAsync(new OrderCreated(1002L)); // 异步:虚拟线程投递,不阻塞调用方
// 异常处理可插拔
bus.setExceptionHandler((event, ex) -> log.warn("事件处理失败", ex));
特点:零第三方依赖(对比 Guava EventBus)、支持父类事件匹配(
Object监听器可收全部事件)、并发安全。
// 1) 事件总线解耦:下单 → 发通知 + 记账,互不阻塞
EventBus bus = new EventBus();
bus.subscribe(OrderCreated.class, e -> mailService.send(e.orderId()));
bus.subscribe(OrderCreated.class, e -> accountService.book(e.orderId()));
// 2) 异步通知服务:socket 回调给客户端
SocketServer server = new SocketServer(0, socket -> {
String cmd = SocketUtil.readLine(socket, StandardCharsets.UTF_8);
SocketUtil.writeString(socket, "received: " + cmd + "\n", StandardCharsets.UTF_8);
});
server.start();
完整可运行示例见
sure-examples的SocketDemo与EventBusDemo。