Skip to content

Repository files navigation

SIP Netty Spring Boot

基于 Java 17+、Netty 和 Spring Boot 的高性能 SIP 协议栈实现。

Build Status Java Version Spring Boot License

🌍 语言 / 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 测试指南 自动化测试场景和使用方法

快速开始

1. 添加依赖

<dependency>
    <groupId>com.sip</groupId>
    <artifactId>sip-netty-spring-boot</artifactId>
    <version>1.0.0</version>
</dependency>

2. 启用 SIP 服务器

@SpringBootApplication
@EnableSipServer
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

3. 配置 (application.yml)

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

4. 处理 SIP 消息

方式一:使用 Spring 事件监听

@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);
    }
}

使用 SIP 客户端

@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("呼叫成功!");
            }
        });
}

构建器 API

// 请求构建
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

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages