2012-12-30 32 views
6

Tôi đang viết một máy chủ sử dụng java NIO và tôi có một số câu hỏi mà tôi không thể tìm thấy câu trả lời.Java NIO và SSL

Đầu tiên, liên quan đến SSLEngine, cách xử lý NEED_TASK đúng cách trong chuỗi được phân tách? Khi tôi gọi các nhiệm vụ trong chuỗi riêng biệt, chúng hoàn thành, nhưng tôi không biết làm thế nào để quay trở lại để thực hiện một thao tác bắt tay khác. Một tùy chọn sẽ là gọi hoạt động đó từ một chuỗi đang thực hiện tác vụ được ủy quyền, nhưng tôi đoán đó không phải là cách để thực hiện.

Một câu hỏi khác là gọi số interestOps() từ chuỗi khác nhau rồi chọn chuỗi. Tôi cần phải thay đổi sở thích quan trọng sau khi nỗ lực ghi vào kênh đã không ghi tất cả dữ liệu. Tôi nghĩ về việc sử dụng một số loại hàng đợi của những thay đổi như trong hướng dẫn ROX NIO, nhưng tôi đã đọc trong một chủ đề khác ở đây rằng nó không phải là cách tốt nhất.

+1

Để đóng cử tri: đây thực sự là một câu hỏi thực sự, ngay cả khi cá nhân bạn không hiểu nó. – EJP

Trả lời

3

trước tiên về SSLEngine, cách xử lý NEED_TASK đúng cách trong chuỗi được phân tách. Khi tôi gọi các nhiệm vụ trong chuỗi riêng biệt, chúng hoàn thành, nhưng tôi không biết làm thế nào để quay trở lại để thực hiện một hoạt động bắt tay khác.

Khi động cơ ở trạng thái NEED_TASK, không thể làm gì khác. Khi nhiệm vụ hoàn thành, bạn nên lặp lại hoạt động mà ban đầu trả về NEED_TASK và để cho động cơ cho bạn biết phải làm gì tiếp theo. Bạn cần chặn hoặc vô hiệu hóa việc sử dụng công cụ đó bởi các luồng khác cho đến khi tác vụ hoàn tất, tức là không chọn trên kênh đó.

Một câu hỏi khác là gọi interestOps() từ chuỗi khác nhau, sau đó chọn chuỗi chủ đề. Tôi cần phải thay đổi sở thích quan trọng sau khi nỗ lực ghi vào kênh đã không ghi tất cả dữ liệu. Tôi nghĩ về việc sử dụng một số loại hàng đợi của những thay đổi như trong hướng dẫn ROX NIO, nhưng tôi đã đọc trong một chủ đề ở đây rằng nó không phải là cách tốt nhất.

Đó có thể là tôi. Tôi ghét những hàng đợi đó. Tôi chỉ thức dậy() bộ chọn và thay đổi sở thích, chưa bao giờ thấy một vấn đề với điều đó. Chủ đề chọn phải đối phó chính xác với các phím zero đang sẵn sàng, nhưng nó đã cần phải làm điều đó.

+0

Tôi cũng quan tâm đến giải pháp này. Bất kỳ ví dụ làm việc nào? –

+0

Tôi không chắc chắn về hai giải pháp mà bạn đề cập đến, nhưng tôi có một triển khai hoàn chỉnh về mặt thương mại của sản phẩm SSLSocketChannel/SSLSelector/SSLServerSocketChannel sử dụng SSLEngine trong nội bộ và được đóng gói như một SelectorProvider. Chi tiết theo yêu cầu. – EJP

+0

Câu trả lời thứ hai là rõ ràng, và đó là những gì tôi sẽ làm. Về đầu tiên tôi vẫn còn một số nghi ngờ. Tôi phải tiếp tục hoạt động cuối cùng được gọi là NEED_TASK rõ ràng, nhưng tôi không biết làm thế nào để làm điều đó, điều duy nhất tôi có thể nghĩ là tiếp tục nó từ chuỗi đã hoàn thành nhiệm vụ, nhưng điều đó sẽ di chuyển việc đọc/ghi từ chủ đề chọn. Bạn có thể cho tôi có lẽ một số gợi ý làm thế nào để tiến hành – user1418979

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