添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

除了记录Websocket错误,正确的方法是什么?

关于onError,端点documentation指出:

Developers may implement this method when the web socket session

creates some kind of error that is not modeled in the web socket

protocol. This may for example be a notification that an incoming

message is too big to handle, or that the incoming message could not

be encoded.

There are a number of categories of exception that this method is

(currently) defined to handle:

connection problems, for example, a socket failure that occurs before the web socket connection can be formally closed. These are modeled as SessionExceptions

runtime errors thrown by developer created message handlers calls.

conversion errors encoding incoming messages before any message handler has been called. These are modeled as DecodeExceptions

所有这些异常类型是否都是致命的,导致websocket关闭?

如果发生错误,onError方法是否应该关闭websocket(调用Session.close())?

到目前为止,我认为完全负责关闭会话并告知客户关闭原因是我的责任.这就是为什么如果session.isOpen()返回true时,我的onError()尝试调用session.close()的原因,但是这导致tomcat(8.0.15)抛出NullPointerException:

Caused by: java.lang.NullPointerException

at org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.onWritePossible(WsRemoteEndpointImplServer.java:96)

at org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doWrite(WsRemoteEndpointImplServer.java:81)

at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:444)

at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.startMessage(WsRemoteEndpointImplBase.java:335)

at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.startMessageBlock(WsRemoteEndpointImplBase.java:264)

at org.apache.tomcat.websocket.WsSession.sendCloseMessage(WsSession.java:536)

at org.apache.tomcat.websocket.WsSession.doClose(WsSession.java:464)

at org.apache.tomcat.websocket.WsSession.close(WsSession.java:441)

at my.package.MyEndpoint.onWebSocketError(MyEndpoint.java:229)

... 18 more

这是tomcat的错误,我的误解还是两者兼而有之?

编辑:似乎Java EE websocket示例dukeeetf2假定错误是致命的;并且无需关闭会话.记录错误,并删除会话:

@OnError

public void error(Session session, Throwable t) {

/* Remove this connection from the queue */

queue.remove(session);

logger.log(Level.INFO, t.toString());

logger.log(Level.INFO, "Connection error.");

除了记录Websocket错误,正确的方法是什么?关于onError,端点documentation指出:Developers may implement this method when the web socket sessioncreates some kind of error that is not modeled in the web socketprotocol. This may ... _ webSocket = new WebSocket (ParamClass. Websocket Url ); _ webSocket .OnOpen += onOpen; _ webSocket .OnMessage += onMessage; _ webSocket .On Error += on Error ; _ webSocket .Connect(); 此异常非彼异常,标题所说的异常是业务上的异常。 最近做了一个需求,消防的设备巡检,如果巡检发现异常,通过手机端提交,后台的实时监控页面实时获取到该设备的信息及位置,然后安排员工去 处理 。 因为需要服务端主动向客户端发送消息,所以很容易的就想到了用 WebSocket 来实现这一功能。 WebSocket 就不做介绍了,上链接:https://developer.mozilla.org/zh-CN/docs/Web/API/ WebSocket 前端略微复杂,需要在一张位置分布图上进行鼠标描
阅读本文章前请先了解 WebSocket WebSocket 在连接关闭的情况下会触发onclose事件,在链接异常的情况下会触发on error 事件。而在弱网条件下,onclose事件触发的灵敏度却不高,往往已经断网很久了才触发onclose事件,前端又去进行重连操作,对实时界面的展示不友好。所以,本文将介绍心跳重连机制来改善这一现象。 心跳重连机制:前端在WS连接成功的情况下,开始执行心跳函数,首先向服务器端发送‘ping’信息,服务器内若收到信息则会返回’pong’信息。在一定时间内,前端收
什么是 WebSocket webSocket 是一种网络通讯协议,与Htpp协议的区别是,Htpp通信只能由客户端发起,服务端响应的这种单向通信;而 webSocket 最大的特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,实现客户端与服务端的双向通讯。 WebSocket API WebSocket .onopen 连接成功的回调 WebSocket .onclose 连接关闭后的回调 WebSocket .on error 连接失败后的回调
@ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个 websocket 服务器端。注解的值将被用于监听用户连接的终端访问URL地址。 onOpen 和 onClose 方法分别被@OnOpen和@OnClose 所注解。这两个注解的作用不言自明:他们定义了当一个新用户连接和断开的时候所调用的方法。 onMessage 方法被@OnMessage所注解
此异常非彼异常,标题所说的异常是业务上的异常。 最近做了一个需求,消防的设备巡检,如果巡检发现异常,通过手机端提交,后台的实时监控页面实时获取到该设备的信息及位置,然后安排员工去 处理 。 因为需要服务端主动向客户端发送消息,所以很容易的就想到了用 WebSocket 来实现这一功能。 WebSocket 就不做介绍了,上链接: https://developer.mozilla.org/zh-CN/docs/Web/API/ WebSocket 前端略微复杂,需要在一张位置分布图上进行鼠标描
本文为joshua317原创文章,转载请注明:转载自joshua317博客HTTPS站点使用 WebSocket 的错误及解决方案 - joshua317的博客 HTTPS站点使用 WebSocket 的错误及解决方案 1.在https下使用ws,提示不安全 第一个问题:在https站点下,使用ws://im.joshua317.com报错,报错信息如下: Mixed Content: The page at 'https://www.joshua317.com/1.html' was loaded ..
为什么会进行心跳检测 简单地说是为了证明客户端和服务器还活着。 websocket 在使用过程中,如果遭遇网络问题等,这个时候服务端没有触发onclose事件,这样会产生多余的连接,并且服务端会继续发送消息给客户端,造成数据丢失。因此需要一种机制来检测客户端和服务端是否处于正常连接的状态,心跳检测和重连截止就产生了。 如何进行心跳检测和重连 每隔一段指定的时间(计时器),向服务器发送一个...