2016-04-26 64 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

它還活着!感謝幫助! –