美文网首页
javaweb + websocket实现客户端

javaweb + websocket实现客户端

作者: Java架构学习者 | 来源:发表于2019-03-13 16:31 被阅读0次

最近需要完成一个javaweb项目,但是没有和数据库连接而是通过websocket通讯实现和服务器端数据交互。我搜了好多,网上大部分都是通过页面websocket连接本地服务器或连接异地服务器,但是这些都把连接地址暴露在了外面,不是我想要的。本人希望websocket连接、数据处理等都是在java后端完成的,结合网上的一些参考资料终于实现了此功能。

这里有个比较好的Java后端WebSocket的Tomcat实现栗子,不过是将本地tomcat作为服务器,websocket连接也暴露在页面。

接下来讲讲本人的实现,本人实现是使用springMVC框架,但是我们只用控制层即可:

Eclipse + JDK1.8 + tomcat8

1、首先我在控制层包中创建一个WebSocketConnect类,在此类中实现websocket的连接方法。注意需要事先引入tomcat服务器lib文件夹中的websocket-api.jar和tomcat-websocket.jar,jsp-api.jar、servlet-api.jar,后面两个可根据需要引入。

//WebSocketClient连接publicclassWebSocketConnect{//websocket建立连接 publicvoidClientConnect(String userInfo,HttpServletRequest request){ HttpSession session = request.getSession();try{   WebSocketClient webSocketClient =newWebSocketClient(newURI("ws://服务器ip地址:8080/websocket"),newDraft_17()) {//打开链接@OverridepublicvoidonOpen(ServerHandshake shake){  System.out.println("握手。。。");  }//这个方法自动接收服务器发过来的信息,直接在此处调用自己写的方法即可.本人将消息存入到session中,别处可以监听,然后取出再清空@OverridepublicvoidonMessage(String msgString){ System.out.println("websocket返回消息"+ msgString);  }//客户端发生错误,即将关闭!@OverridepublicvoidonError(Exception e){  System.out.println("发生错误已关闭");  }//关闭链接@OverridepublicvoidonClose(intarg0, String arg1, boolean arg2){  System.out.println("链接已关闭");  } };  webSocketClient.connect(); System.out.println("建立websocket连接");//将用户websocket连接对象存入session中,别处用取出使用即可。session.setAttribute("webSocketClient", webSocketClient); }catch(URISyntaxException e) { e.printStackTrace(); } }//关闭websocket连接publicvoidcloseWebSocket(HttpServletRequest request){ HttpSession session = request.getSession(); WebSocketClient webSocketClient = (WebSocketClient) session.getAttribute("webSocketClient"); webSocketClient.close(); System.out.println("websocket主动关闭!"); }}

2、websocket连接方法已经完成了,下面我们就只需在用的地方调用即可,此处为我在用户登录控制器调用的栗子。

//实例化对象 WebSocketConnect webSocketConnect =newWebSocketConnect();/*用户登录*/@RequestMapping(value ="/login",method = RequestMethod.POST,produces="text/html;charset=UTF-8;")@ResponseBody//此注解不能省略 否则ajax无法接受返回值publicvoidlogin(HttpServletRequest request,HttpServletResponse response)throwsUnsupportedEncodingException{//调用对象webSocketConnect中连接方法webSocketConnect.ClientConnect(request);}

3、现在websocket已经建立连接了,那么下面我们需要去发送消息了

//从session中取出用户登录的连接对象,实现发送消息WebSocketClient webSocketClient = (WebSocketClient) session.getAttribute("webSocketClient");Stringmessage= “狼来了”; webSocketClient.send(message);

4、最后退出系统时调用close方法即可。

//方式一:使用对象调用webSocketConnect类中写的closeWebSocket方法。webSocketConnect.closeWebSocket(request);//方式二:从session中取出连接对象,直接调用close()方法。WebSocketClient webSocketClient = (WebSocketClient) session.getAttribute("webSocketClient");

欢迎工作一到五年的Java工程师朋友们加入Java技术交流:585550789

相关文章

网友评论

      本文标题:javaweb + websocket实现客户端

      本文链接:https://www.haomeiwen.com/subject/frjtmqtx.html