zoukankan      html  css  js  c++  java
  • javaweb + websocket实现客户端

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

     这里有个比较好的Java后端WebSocket的Tomcat实现栗子,不过是将本地tomcat作为服务器,websocket连接也暴露在页面,但是有一定的参考价值。https://www.cnblogs.com/xdp-gacl/p/5193279.html

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

    Eclipse + JDK1.8 + tomcat8

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

    //WebSocketClient连接
    public class WebSocketConnect {//websocket建立连接         
        public void ClientConnect(String userInfo,HttpServletRequest request) {
            HttpSession session = request.getSession();
                try {
                     WebSocketClient webSocketClient = new WebSocketClient(new URI("ws://服务器ip地址:8080/websocket"),new Draft_17()) { 
                       
               
    //打开链接 @Override public void onOpen(ServerHandshake shake) { System.out.println("握手。。。"); }
    //这个方法自动接收服务器发过来的信息,直接在此处调用自己写的方法即可.本人将消息存入到session中,别处可以监听,然后取出再清空 @Override public void onMessage(String msgString) { System.out.println("websocket返回消息" + msgString); }
    //客户端发生错误,即将关闭! @Override public void onError(Exception e) { System.out.println("发生错误已关闭"); } //关闭链接 @Override public void onClose(int arg0, 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连接 public void closeWebSocket(HttpServletRequest request) { HttpSession session = request.getSession(); WebSocketClient webSocketClient = (WebSocketClient) session.getAttribute("webSocketClient"); webSocketClient.close(); System.out.println("websocket主动关闭!"); } }

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

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

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

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

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

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

     注:原创作品,欢迎关注,一起学习一起进步!

  • 相关阅读:
    Java多线程学习
    JAVA类的加载机制
    这四款也许是电脑录屏软件中免费、无广告且最实用的,程序员必备
    手机端没有好的录屏软件?地表最强移动端录屏软件了解一下?
    手把手教你 在Pytorch框架上部署和测试 关键点人脸检测项目DBFace,成功实现人脸检测效果
    520是秀恩爱吃狗粮,521才是真正的告白日,- Python告白神器用起来 !
    截图还在使用QQ的Ctrl + Alt + A 截图?还不会网页长截图?
    卷积神经网络之卷积操作,使用卷积运算实现图片边缘特征检测
    小白也能弄懂的卷积神经网络(Convolutional Neural Networks )
    官网安装Python包太慢?教你三种下载安装方式-PiP、conda、轮子,教你三种Pytorch的下载安装方式,保证你再也不用出现Error
  • 原文地址:https://www.cnblogs.com/qiantao/p/10519173.html
Copyright © 2011-2022 走看看