1
我已经有纯粹和简单的Java Nio套接字服务器。使用JSON实现数据传输。有1个客户端都可以正常工作,但是当我尝试启动工作负载测试时,出现了一些问题。这里是我的分析传入的字节缓冲区方法(MessageFromBuffer仅仅是字节[]的包装):从ByteBuffer解析多个JSON
private JSONObject parseIncomingMessageToJson(MessageFromBuffer messageFromBuffer) {
int size = messageFromBuffer.getSize();
byte[] data = messageFromBuffer.getData();
byte[] dataCopy = new byte[size];
System.arraycopy(data, 0, dataCopy, 0, size);
JSONParser jsonParser = new JSONParser();
JSONObject jsonMessage = null;
try {
jsonMessage = (JSONObject) jsonParser.parse(new String(dataCopy));
} catch (ParseException pe) {
System.out.println("Error formatting incoming message to json: " + new String(messageFromBuffer.getData()));
}
return jsonMessage;
}
如果只有一个JSON实体的缓冲cosists - 一切工作正常。但是,在100个客户端的攻击,缓冲区可与多个JSON enities填充,如图所示(所有测试客户端发送相同的数据):
Error formatting incoming message to json: {"TYPE":"REGISTRATION","LOGIN":"Padre","PASSWORD":"3214"}
{"TYPE":"REGISTRATION","LOGIN":"Padre","PASSWORD":"3214"}
{"TYPE":"REGISTRATION","LOGIN":"Padre","PASSWORD":"3214"}
{"TYPE":"REGISTRATION","LOGIN":"Padre","PASSWORD":"3214"}
{"TYPE":"REGISTRATION","LOGIN":"Padre","PASSWORD":"3214"}
{"TYPE":"REGISTRATION","LOGIN":"Padre","PASSWORD":"3214"}
{"TYPE":"REGISTRATION","LOGIN":"Padre","PASSWORD":"3214"}
{"TYPE":"REGISTRATION","LOGIN":"Padre","PASSWORD":"3214"}
{"TYPE":"REGISTRATION","LOGIN":"Padre","PASSWORD":"3214"}
方法抛出异常的东西就没有回报。每次从SOcketChanel读取我清除缓冲区 - 所有这些消息都会丢失。在这种情况下是否有适当的JSON解析技术?
它还活着!感谢帮助! –