我正在使用java NIO编写一个服务器,我有几个问题找不到答案。
首先,关于SSLEngine,如何在独立的线程中正确处理NEED_TASK?当我在单独的线程中调用任务时,它们会完成,但我不知道如何返回以执行另一个握手操作。一种选择是从执行委托任务的线程调用该操作,但我猜这不是实现该操作的方法。
另一个问题是从不同的线程调用interestOps(),而不是选择器线程。在尝试写入通道并未写入所有数据后,我需要更改关键兴趣。我想过在ROX NIO教程中使用某种更改队列,但我在这里读到了另一个线程,它不是最好的方法。
发布于 2012-12-31 03:00:22
首先关于SSLEngine,如何在独立的线程中正确地处理NEED_TASK。当我在单独的线程中调用任务时,它们会完成,但我不知道如何返回以执行另一个握手操作。
当引擎处于NEED_TASK状态时,它不能做其他任何事情。当任务完成时,您应该重复最初返回NEED_TASK的操作,并让引擎告诉您下一步要做什么。您需要阻止或禁用其他线程对该引擎的使用,直到任务完成,即不要在该通道上进行选择。
另一个问题是从不同的线程调用interestOps(),而不是选择器线程。在尝试写入通道并未写入所有数据后,我需要更改关键兴趣。我想过在ROX NIO教程中使用某种更改队列,但我在这里读到了另一个线程,它不是最好的方法。
那应该是我。我讨厌那些长队。我只是唤醒了选择器并更改了interestOps,没有发现有什么问题。选择器线程必须正确地处理准备好的零键,但它已经需要这样做了。
https://stackoverflow.com/questions/14093546
复制相似问题