2013-08-15 23 views
5

Channel.id() đã bị xóa trong Netty 4.0.0.CR9.Làm thế nào để có được một số ID cho Kênh Netty?

Làm cách nào để nhận ID của Kênh trong những ngày này?

Tôi đã từng sử dụng id() cho mục đích ghi nhật ký trong tất cả các Trình xử lý của tôi (Ví dụ: System.out.println (ctx.channel(). Id() + "- readableBytes():" + in.readableBytes())).

Tôi không thể dựa vào phương thức toString của kênh vì có thể bị ghi đè.

Trả lời

9

Nếu bạn chắc chắn rằng kênh đang hoạt động, bạn có thể tạo ID duy nhất của kênh bằng cách kết hợp hashCode(), remoteAddress()localAddress(). Ngoài ra, bạn có thể chỉ cần sử dụng Channel.toString() tạo chuỗi từ ba thuộc tính. Nếu kênh chưa hoạt động, remoteAddress()localAddress() sẽ không cung cấp thông tin có ý nghĩa, vì vậy bạn vẫn có nguy cơ bị va chạm.

Netty 4.1 và 5.0 được giới thiệu lại Channel.id(), trả về loại mới có tên ChannelId. Nó sử dụng các thông tin khác nhau như địa chỉ MAC, PID hiện tại, dấu thời gian và mã băm, để nó thậm chí có thể được sử dụng như một ID duy nhất trên toàn cầu. Kiểm tra Javadoc.

+0

Đây là câu trả lời hoàn chỉnh nhất. Netty 4 không còn có nó nhưng bạn có thể lấy nó bằng cách kết hợp các thứ, và Netty 5 sẽ có nó một lần nữa. Cảm ơn. – AndrewBourgeois

+0

Netty 4.1 cũng có nó. – trustin

+1

Hãy cẩn thận khi sử dụng Channel.toString làm id vì nó thay đổi khi kênh không hoạt động https://github.com/netty/netty/blob/4.0/transport/src/main/java/io/netty/channel /AbstractChannel.java#L352 – justinjhendrick

1

Bạn có thể sử dụng Channel.hashCode(). Chúng tôi đã xóa id() vì nó không được bảo đảm là độc nhất 100%.

+0

hashCode không được đảm bảo trả lại giá trị duy nhất, phải không? – AndrewBourgeois

+0

'hashCode()' không được bảo đảm trả về một giá trị duy nhất. Tôi vẫn khuyên bạn sử dụng 'Channel.toString()'. Tất cả các triển khai 'Channel' thực sự dựa vào' AbstractChannel.toString() '. – trustin

+0

@trustin: phương thức toString chứa địa chỉ từ xa, làm cho nó trở nên độc đáo. Bạn có thể đăng bài đó như một câu trả lời không? Tôi sẽ xem xét các trường hợp mà bạn không thể truy xuất địa chỉ từ xa khi tôi tìm thấy thời gian. – AndrewBourgeois

Các vấn đề liên quan