mina和websocket通信的问题

qq_27447897 2016-12-06 04:19:27
	try {
var url = "<%=webserviceUrl%>";
if ('WebSocket' in window) {
socket = new WebSocket(url);
} else if ('MozWebSocket' in window) {
socket = new MozWebSocket(url);
}
} catch (e) {
console.warn(e);
}
//连接成功时触发
socket.onopen = function(){
socket.send("HEARTBEATRESPONSE");
//socket.send("connected successful...");
};
//监听收到的消息
socket.onmessage = function(res){
alert("onmessage receiver msg:"+res.data);
//alert("onmessage:"+res);
if(res=="HEARTBEATREQUEST")
socket.send("HEARTBEATRESPONSE");
};
// 监听Socket的关闭
socket.onclose = function(event) {
//alert('Client notified socket has closed',event);
console.debug("receiver msg:"+event);
};
socket.onerror=function(event){
console.error("receiver error msg:"+event);
};

});


以上是客户端的js代码,
我服务器端使用的是mina,可是服务器跟websocket握手成功后,服务端能收到客户端的消息,但是服务端给客户端发送消息时就会报错,最后做了心跳处理,这里还是有问题,WebSocket connection to 'ws://127.0.0.1:9012/' failed: Invalid frame header
,
 public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception {
boolean isHandshakeResponse = message instanceof String;
// boolean isHandshakeResponse = message instanceof WebSocketHandShakeResponse;
boolean isDataFramePacket = message instanceof WebSocketCodecPacket;
boolean isRemoteWebSocket = session.containsAttribute(WebSocketUtils.SessionAttribute) && (true==(Boolean)session.getAttribute(WebSocketUtils.SessionAttribute));
IoBuffer resultBuffer;
if(isHandshakeResponse){
// WebSocketHandShakeResponse response = (WebSocketHandShakeResponse)message;
// resultBuffer = WebSocketEncoder.buildWSResponseBuffer(response);
resultBuffer = IoBuffer.allocate(((String)message).getBytes().length, false);
resultBuffer.setAutoExpand(true);
resultBuffer.put(((String)message).getBytes());
resultBuffer.flip();
}
else if(isDataFramePacket){
WebSocketCodecPacket packet = (WebSocketCodecPacket)message;
resultBuffer = isRemoteWebSocket ? WebSocketEncoder.buildWSDataFrameBuffer(packet.getPacket()) : packet.getPacket();
}
else{
throw (new Exception("message not a websocket type"));
}

out.write(resultBuffer);
}

以上是encode代码,我怀疑问题就出在这里,但是具体的原因始终找不到,可能是websocket跟mina采用的codec方式不同,请问一下哪位大神可有方法?
...全文
501 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_27447897 2016-12-06
  • 打赏
  • 举报
回复
代码请看if条件里面的内容即可,

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧