作为一名软件开发人员,成为架构师是追求之一。系统架构师的能力不仅仅体现在书写业务代码上,更重要的是系统的结构和性能,是否具有可拓展性、高并发性和稳定性。
最近一个人在写websocket服务端,最后完成了,有很多分享的地方,特意总结如下:
为什么要使用websocket?
websocket是基于和客户端浏览器保持长连接的服务,客户端定时请求服务端的websocket,websocket实时根据传递过来的session来进行发送消息msg,这样就能提高长连接。
websocket需要心跳?
客户端和服务器端的长连接,有时session会进行失效,所以需要客户端定时的发送一个心跳包,这个心跳包可以没有内容的,只需要让服务端进行响应,就能保持这个长连接。
websocket如何响应请求?
@ServerEndpoint(value = " /standardWebsocket")
这个表示直接url到这个地址就可以了。
/**
* 创建连接
* @param session
*/
@OnOpen
public void start(Session session) {
try {
this.session = session;
this.id = UUID.randomUUID().toString();
logger.info("连接websocket,id=" + this.id);
} catch (Exception ex) {
logger.error("WebSocket.start(Session session)方法发生错误:"
+ ExceptionUtil.getStackMsg(ex));
}
}
这个表示创建连接,也就是可以保存客户端的session。
/**
* 接收数据
* @param message
*/
@OnMessage
public void incoming(String message) {
try {
webSocketProcesser.process(message, this);
} catch (Exception ex) {
logger.error("WebSocket.incoming(String message)方法发生错误:"
+ ExceptionUtil.getStackMsg(ex));
}
}
这个表示接受数据的时候,响应对应的后台方法。
/**
* 关闭连接
*/
@OnClose
public void end() {
try {
try {
if (this.session != null) {
this.session.close();
}
} catch (IllegalStateException e) {
logger.info("WebSocket前端断开连接");
} catch (Exception e) {
logger.error("WebSocket关闭连接出错", e);
}
} catch (Exception ex) {
logger.error("WebSocket.end()方法发生错误:"
+ ExceptionUtil.getStackMsg(ex));
}
}
表示关闭连接的时候,清除对应的session。