2013-02-14 23 views
5

Tôi đã nhìn qua ở ví dụ máy chủ proxy từ Netty website:Trình xử lý Netty có duy nhất cho mỗi kết nối không?

Ví dụ mã nguồn xử lý có một biến dễ bay hơi

private volatile Channel outboundChannel; 

mà sẽ chăm sóc của các kênh kết nối đến một máy chủ proxy.

Điều này khiến tôi tự hỏi liệu đây có phải là cách chính xác và an toàn để triển khai cho nhiều kết nối cho proxy hay không.

Tôi muốn cho phép nhiều kết nối (đến) kết nối với các giới hạn khác nhau, đồng thời đảm bảo mọi kết nối gửi đến được liên kết duy nhất với kênh đi.

Theo kiến ​​thức của tôi, Netty tạo ra một đường ống mới cho mỗi kết nối. Điều này có nghĩa là một trình xử lý mới được tạo ra bởi nhà máy đường ống là duy nhất dành riêng cho kết nối mới (kênh)?

p.s. Nếu tôi có 1.000 kết nối hoạt động với máy chủ Netty của tôi, điều này có nghĩa là có 1.000 đường dẫn khác nhau không?

Trả lời

8

Có một đường ống được tạo cho mỗi kết nối, nhưng đường ống có thể chứa cả trình xử lý được chia sẻ và độc quyền. Một số trình xử lý không giữ trạng thái và một cá thể đơn lẻ có thể được chèn vào nhiều đường ống [tất cả]. Netty cung cấp trình xử lý có thể được chia sẻ được chú thích với ChannelHandler.Sharable. Xem phần có tiêu đề Trình xử lý kênh được chia sẻ và độc quyền trong số tutorial này.

+1

Phải, nhưng nếu tôi khai báo một trình xử lý kênh độc quyền cho từng kết nối (mỗi đường dẫn), điều đó có nghĩa là trình xử lý kênh chỉ dành riêng cho kết nối cụ thể đó không? – wns349

+1

Chính xác. Bạn có thể thực hiện lại một trình xử lý đã cho để có thể chia sẻ được bằng cách giữ tất cả trạng thái trong các tệp đính kèm hoặc ChannelLocals. – Nicholas

+0

Tôi quan tâm đến vấn đề thu thập tài nguyên. Làm thế nào tôi có thể giải phóng tài nguyên bộ xử lý sau khi sử dụng? –

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