基于 Java 17+、Netty 和 Spring Boot 的高性能 SIP 协议栈实现。
🌍 语言 / Languages: English | 日本語 | Français | Deutsch | 한국어 | हिन्दी | 简体中文
- 高性能: 基于 Netty 4.x 非阻塞 I/O 实现,吞吐量可达 10,000+ 请求/秒
- 低延迟: 平均处理延迟 < 1ms
- 多协议支持: UDP、TCP、WebSocket 传输
- Spring Boot 集成: 自动配置、配置属性、事件驱动
- JDK 17+: 使用现代 Java 特性
- 易于使用: 注解驱动的处理器、流式构建器 API
- 完整的 SIP 支持: 支持 INVITE、REGISTER、BYE、ACK、CANCEL、OPTIONS、MESSAGE 等方法
| 指标 | 数值 | 备注 |
|---|---|---|
| 吞吐量 | ~10,000+ req/s | 多客户端并发 |
| 单请求延迟 | < 1ms | OPTIONS 请求 |
| P99 延迟 | < 10ms | 高负载条件 |
| 并发连接 | 10,000+ | TCP/WebSocket |
详细性能数据请查看 性能基准测试报告
| 文档 | 说明 |
|---|---|
| 使用与集成指南 | 详细的使用文档、API 说明、最佳实践 |
| 二次开发指南 | 架构说明、扩展开发、高级主题 |
| 性能基准测试 | 性能测试结果、优化建议 |
| Maven 发布指南 | GitHub Packages 发布配置 |
| SIPp 测试指南 | 自动化测试场景和使用方法 |
<dependency>
<groupId>com.sip</groupId>
<artifactId>sip-netty-spring-boot</artifactId>
<version>1.0.0</version>
</dependency>@SpringBootApplication
@EnableSipServer
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}sip:
server:
enabled: true
host: 0.0.0.0
udp-port: 5060
tcp-port: 5060
ws-port: 5066
transport:
udp-enabled: true
tcp-enabled: true
ws-enabled: false@Component
public class MySipHandler {
@Autowired
private SipServer sipServer;
@EventListener
public void handleRequest(SipRequestEvent event) {
SIPRequest request = event.getRequest();
InetSocketAddress remoteAddress = event.getRemoteAddress();
String transport = event.getTransport();
if ("INVITE".equals(request.getMethod())) {
SIPResponse response = SipResponseBuilder.from(request)
.ok()
.build();
sipServer.send(response, remoteAddress, transport);
}
}
}@SipHandler
public class MySipHandler {
@Autowired
private SipServer sipServer;
@SipMethod("INVITE")
public void handleInvite(SIPRequest request, InetSocketAddress remoteAddress, String transport) {
sipServer.send(SipResponseBuilder.from(request).trying().build(), remoteAddress, transport);
sipServer.send(SipResponseBuilder.from(request).ok().build(), remoteAddress, transport);
}
@SipMethod("REGISTER")
public void handleRegister(SIPRequest request, InetSocketAddress remoteAddress, String transport) {
sipServer.send(SipResponseBuilder.from(request).ok().build(), remoteAddress, transport);
}
}@Autowired
private SipClient sipClient;
public void makeCall() {
sipClient.start().join();
// 发送 REGISTER
SIPResponse response = sipClient.sendRegister(
"sip:registrar.example.com",
"sip:user@example.com",
3600
).get();
// 发送 INVITE
sipClient.sendInvite("sip:callee@example.com", "sip:caller@example.com", sdpBody)
.thenAccept(resp -> {
if (resp.isSuccess()) {
System.out.println("呼叫成功!");
}
});
}// 请求构建
SIPRequest request = SipRequestBuilder.invite("sip:bob@biloxi.com")
.from("sip:alice@atlanta.com")
.to("sip:bob@biloxi.com")
.via("192.168.1.1", 5060)
.sdp(sdpBody)
.build();
// 响应构建
SIPResponse response = SipResponseBuilder.from(request)
.ok()
.contact("<sip:server@example.com>")
.build();
// URI 解析
SipUri uri = SipUri.parse("sip:user@example.com:5060;transport=tcp");| 属性 | 描述 | 默认值 |
|---|---|---|
sip.server.enabled |
是否启用 SIP 服务器 | true |
sip.server.host |
绑定地址 | 0.0.0.0 |
sip.server.udp-port |
UDP 端口 | 5060 |
sip.server.tcp-port |
TCP 端口 | 5060 |
sip.server.ws-port |
WebSocket 端口 | 5066 |
sip.transport.udp-enabled |
是否启用 UDP | true |
sip.transport.tcp-enabled |
是否启用 TCP | true |
sip.transport.ws-enabled |
是否启用 WebSocket | false |
# 编译
mvn compile
# 测试
mvn test
# 打包
mvn package
# 启动服务器
mvn spring-boot:run- JDK 17 或更高版本
- Maven 3.6+
- Spring Boot 3.2+
- ✅ 核心协议栈实现
- ✅ Spring Boot 自动配置
- ✅ UDP/TCP/WebSocket 传输
- ✅ 事件驱动消息处理
- ✅ 集成测试和性能测试
- 🚧 TLS 支持 (进行中)
- 🚧 SIP 认证 (进行中)
MIT License