架构师之路(十)

来源:互联网 发布:优易淘宝小号注册机 编辑:程序博客网 时间:2024/05/22 08:02
架构师之路(十)

作为一名软件开发人员,成为架构师是追求之一。系统架构师的能力不仅仅体现在书写业务代码上,更重要的是系统的结构和性能,是否具有可拓展性、高并发性和稳定性。



最近一个人在写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。


原创粉丝点击