2016-04-26 63 views
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解析技术?

回答

2

从您发布的内容看,它与this类似,因为输出是用下一行字符分隔的。你可以利用它将字符串拆分为序列化的json响应数组。

然后你可以单独将它们解析成json对象。

+0

它还活着!感谢帮助! –