2012-01-09 37 views
10

Tôi đang tạo ứng dụng máy khách cho máy khách bằng cách sử dụng netty và ios, tôi đang gặp sự cố khi người dùng tắt WiFi trên thiết bị ios của anh ấy, máy chủ netty không biết về nó. Máy chủ cần phải biết để làm sạch cho người dùng đó và đặt người đó ngoại tuyến, nhưng bây giờ khi người dùng cố gắng kết nối lại, máy chủ chỉ cho biết rằng họ đã trực tuyến.Phát hiện kín kênh Netty

Trả lời

13

Nếu tôi hiểu vấn đề của bạn một cách chính xác: Bạn muốn nghe cho kênh khách hàng đóng kiện trong phía máy chủ và làm một số ngẫu nhiên phiên,

Có hai cách để lắng nghe cho kênh đóng các sự kiện trong Netty:

1) Nếu xử lý máy chủ của bạn kéo dài SimpleChannelHandler/SimpleChannelHandler, sau đó bạn có thể ghi đè phương pháp sau đây và viết dọn dẹp luận phiên của bạn có

public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception; 

2) Nếu bạn chỉ có quyền truy cập vào các tài liệu tham khảo kênh, sau đó bạn có thể g et kênh tương lai gần và đăng ký thực hiện của bạn của ChannelFutureListener với logic dọn dẹp phiên của bạn,

ChannelFuture closeFuture = channel.closeFuture(); 

closeFuture.addListener(new ChannelFutureListener() { 
    @Override 
    public void operationComplete(ChannelFuture future) throws Exception { 
     //session cleanup logic 
    } 
}); 
+3

Vâng, tôi đã thực hiện phương pháp channelClosed, và nó hoạt động tốt khi người dùng đóng ứng dụng ví dụ, nhưng nếu người dùng chỉ mất kết nối wifi của mình, phương pháp này không được gọi. –

+2

sau đó tốt hơn để thêm một IdleStateHandler với thời gian chờ đọc tối ưu nhàn rỗi. Nếu người dùng không sử dụng nhiều hơn thời gian đó, có thể nó có thể là trường hợp bị mất kết nối, vì vậy hãy đóng kết nối trên IdleStateEvent khỏi trình xử lý máy chủ của bạn. –

+3

Trong các phiên bản mới hơn của Netty, 'getCloseFuture()' có vẻ là 'closeFuture()' – childofsoong

1

Kiểm tra phiên id và cho phép đàm phán lại. Hoặc bạn có thể sử dụng một cái gì đó như bộ điều khiển cookie. Tôi có thể hỏi câu hỏi chủ đề: Khách hàng của bạn trên ios tương tác với máy chủ netty như thế nào? (Những gì khuôn khổ bạn sử dụng về phía khách hàng, và những gì bộ giải mã/mã hóa sử dụng?)

3

Sử dụng IdleStateHandler

Bạn có thể phát hiện khi không có yêu cầu/phản ứng trong khoảng thời gian nhất định.

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