/**
* 服务器接收到客户端消息时调用的方法
*/
@OnMessage(maxMessageSize = 10240000)
public synchronized void onMessage(String message, Session session) {
//获取
LOGGER.info("收到来自" + WebSocketUsers.getUsers() + "的消息:" +message);
WSResult result = new WSResult();
WSResult.WSHeader header= result.new WSHeader();
WSResult.WSMeta meta= result.new WSMeta();
WSResult.RsData data= result.new RsData();
//判断结束标识
if(message.contains(END_SIGN)){
// TODO 预留结束标识,后期可以解决粘包,或者数据包比较大的问题
//去掉结束标志,解析报文
message = message.substring(0, message.lastIndexOf("}") + 1);
}
//判断格式是否能成功转为json
if(JSONUtils.isJSONString(message)){
//通过工具类解析后转发到对应的req
DataParsing.parsingJson(session,message);
}else {
data.setMessage("数据包格式不正确");
data.setCode(500L);
data.setData("");
result.setHeader(header);
meta.setRequestID("");
result.setData(data);
result.setMeta(meta);
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(result);
WebSocketUsers.sendMessageToUserByText(session, jsonObject.toString());
}
}
在接收消息时,如果你不给属性复制:maxMessageSize,它的默认值为8k,一旦传入的字符串大小超出限制就会导致连接断开,我就索性设置了一个大一点的值。
但是不是值越大越好,容易造成内存溢出或者连接超时。