javawebsocket注解_Java使⽤WebSocket
之前有⼀篇WebSocket的视频通话教程,那个主要不是讲怎么使⽤WebSocket,这篇⽂章主要就说⼀下WebSocket的使⽤。
⾸先要⽤到的是最新的Tomcat8,因为要⽀持JavaEE7,JavaEE7把WebSocket纳⼊规范的。
下⾯是代码( 主要使⽤注解配置 ):
@ServerEndpoint("/face/accept/{rid}")
public class FaceSocket {
@OnOpen
public void onOpen(Session session, @PathParam("rid") String rid) {
// 打开⼀个websocket时调⽤⽅法,上⾯的注解有点类似springMVC
}
@OnClose
public void onClose(Session session, @PathParam("rid") String rid) {
// 关闭时调⽤⽅法,这个⽅法好像存在问题,⽽且不要⼿动关闭session
}
@OnMessage
public void onMessage(String message, Session session, @PathParam ("rid")String rid) {
// 接受到消息时调⽤⽅法,session就是⽤户的session,message就是接受到的⽤户的信息
}
}
这⾥要说⼀下上⾯的onClose⽅法,这个⽅法⾥⾯:
不要使⽤session发送消息给⽤户
不要⼿动调⽤close⽅法
不能有任何异常抛出
以上三种情况都会引起Message will not be sent because the WebSocket session has been closed,后来发现升级到Tomcat9后就没有上⾯的错误了。估计应该是Tomcat8的BUG。
下⾯是JS部分(使⽤sender的send⽅法就可以发送消息了):
var sender;
function initWebSocket(url) {
if(!WebSocket) {
alert("你的浏览器不⽀持WebSocket!");
return null;
}
var webSocket = new WebSocket(url);
console.log("websocket发送错误:" + event.data);
}
console.log("websocket打开");
}
console.log("websocket关闭");
}
/
/ websocket收到消息
var message = JSON.parse(event.data);
t, true);
}
sender = {
send : function(message) {
// 调⽤websocket的发送
webSocket.send(message);
}
}
}
URL的格式:ws://域名/face/accept/rid
17-Apr-2018 11:59:37.595 严重 [http-nio-8080-exec-5] at.websocket.Error No error handling configured for [com.acgist.web.websocket.AcgistVideo] and the following error occurred
java.io.EOFException
at at.util.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1167)
at at.util.ad(NioEndpoint.java:1107)
这个错误时没有添加@OnError这个处理⽅法导致的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论