带状态机的非阻塞套接字

时间:2014-10-25 11:04:21

标签: java multithreading sockets nio

我正在尝试使用Java中的NIO编写自己的客户端服务器逻辑 我是我的解决方案,我使用框架来提供沟通 第一个字节保存有关请求类型的信息,第二个字节保持帧的大小。 如果收到标题,那么我的班级等待休息数据。当我想要发送大帧ex时出现问题。大文件(30MB)或在客户端动态生成的东西。我想保持非阻塞的想法(我假设线程的数量应该等于逻辑CPU的数量,并且许多用户应该在一个线程中执行),因为在一次许多用户应该可以发送自己的文件(相同的部分)。应平衡所有用户的线程(每个用户的小部分数据)。我为StateMachine编写了服务器和类的基本类。在当前版本中,在帧完成之后执行活动机器状态。它的意思是,我需要在执行特定状态之前存储帧。我可以通过在每次创建大小等于帧大小的新ByteBuffer来解决它,之后我可以删除它。

我的问题是:方法好吗? 为了解释ByteBuffer数据,我使用类似于DataInputStream的自己的类。

示例案例(每个连接的客户端保持自己的状态):

Raw state: // without logged user
- disconnect operation
- login operation:
    Admin state:
    - list plugins operation
    - add plugin operation
    - remove plugin operation
    - logout operation
    - disconnect operation
    Guest state:
    // - guest operations here...
    // ...
    // other states...

对于小缓冲区,我可以使用FRAME_FINISHED之类的附加标志每次执行特定状态,但它几乎不会干扰DataInputStream,因为它需要为复杂的帧编写复杂的操作源,并在读取期间以特定类型为DataInputStream连接ByteBuffer中的可用数据操作(例如,当一个缓冲区结束并且第二个启动时,readInt32。)

0 个答案:

没有答案