7

我正在使用 java NIO 编写服务器,我有几个问题找不到答案。

一、关于SSLEngine,如何NEED_TASK在单独的线程中正确处理?当我在单独的线程中调用任务时,它们会完成,但我不知道如何返回执行另一个握手操作。一种选择是从执行委派任务的线程中调用该操作,但我想这不是这样做的方法。

interestOps()另一个问题是关于从不同的线程然后选择器线程调用。在尝试写入频道并没有写入所有数据后,我需要更改关键兴趣。我考虑过使用 ROX NIO 教程中的某种更改队列,但我在这里的另一个线程中读到这不是最好的方法。

4

1 回答 1

3

首先关于 SSLEngine,如何在单独的线程中正确处理 NEED_TASK。当我在单独的线程中调用任务时,它们会完成,但我不知道如何返回执行另一个握手操作。

当引擎处于 NEED_TASK 状态时,它不能做任何其他事情。任务完成后,您应该重复最初返回 NEED_TASK 的操作,并让引擎告诉您下一步该做什么。在任务完成之前,您需要阻止或禁用其他线程对该引擎的使用,即不要在该通道上进行选择。

另一个问题是关于从不同线程然后选择器线程调用interestOps()。在尝试写入频道并没有写入所有数据后,我需要更改关键兴趣。我考虑过使用 ROX NIO 教程中的某种更改队列,但我在这里的另一个线程中读到这不是最好的方法。

那将是我。我讨厌那些排队。我只是唤醒()选择器并更改了interestOps,从未遇到过问题。选择器线程必须正确处理准备好的零键,但它已经需要这样做了。

于 2012-12-30T19:00:22.067 回答