我正在尝试使用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。)