mina和websocket通信的问题
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方式不同,请问一下哪位大神可有方法?
...全文
相关推荐
websocket+java服务器(mina)
WebSocket是HTML5中引入的一种新的通信协议,它允许在客户端和服务器之间建立持久的全双工连接,从而实现双向通信。
springboot mina 串口对接
综上所述,SpringBoot与Mina的结合,使我们能够方便地在Java应用程序中实现串口通信,解决粘包和断包问题,同时可能借助WebSocket实现与Web客户端的交互。"
Nio的方式实现Websocket通讯(解决websocket手机端经常连接不上)
该项目采用Apache MINA框架结合NIO技术实现高效的WebSocket通信服务,重点解决了移动端连接不稳定的问题。通过自定义编解码器处理WebSocket协议帧,实现消息的封装与解析,并利用M
mina服务器实例
Mina的核心设计理念是将网络通信的底层细节抽象化,使开发者能够更加专注于业务逻辑,而无需关注诸如Socket编程中的网络读写、线程管理等复杂问题。
mina学习资料
- WebSocket服务:结合WebSocket协议,创建实时通信应用。五、性能优化与调试5.1 性能调优- 线程池配置:合理设置线程池大小,提高系统并发能力。


Web 开发
