最近需要完成一个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");

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

转载于:https://www.cnblogs.com/qiantao/p/10519173.html

javaweb + websocket实现客户端相关推荐

  1. javaweb + websocket实现客户端 保存到session

    javaweb + websocket实现客户端 最近需要完成一个javaweb项目,但是没有和数据库连接而是通过websocket通讯实现和服务器端数据交互.我搜了好多,网上大部分都是通过页面web ...

  2. 未能分析从服务器收到的消息,WebSocket Javascript客户端未收到来自服务器的消息...

    我已经在本地GlassFish 4.1服务器上部署了Java Web应用程序,该服务器实现了与Web客户端互操作的WebSockets.我能够通过套接字成功执行客户端到服务器的通信,但由于某种原因,服 ...

  3. WebSocket安卓客户端实现详解(一)–连接建立与重连

    http://blog.csdn.net/zly921112/article/details/72973054 前言 这里特别说明下因为WebSocket服务端是公司线上项目所以这里url和具体协议我 ...

  4. C# WebSocket(Fleck) 客户端:html Winfrom

    目录 一.简介 二.服务端 1.新建项目 2.WebSocketHelper 3.Program 三.客户端 1.html 2.Winform 结束 一.简介 WebSocket 是一种在单个TCP连 ...

  5. springboot2.0 + websocket + android客户端实战

    简介 WebSocket是HTML5中的协议,支持持久连接,可以有效解决客户端和服务端之间数据数据同步时需要轮询的问题. 效果图 服务端 创建web工程(此处省略) 引入websocket maven ...

  6. 日志读取_php作为websocket的客户端实时读取推送日志文件

    首先要使用composer来下载一个第三方扩展就可以实现php的websocket客户端,直接在当前目录生成下composer.json文件就可以了. composer require textalk ...

  7. websocket多客户端接收消息_WebSocket之消息接收发送

    WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信--允许服务器主动发送信息给客户端. 在 WebSocket API 中,浏览器和服务器 ...

  8. WebSocket 获取客户端的IP

    今天用到websocket,希望服务器端在连接建立时获取到客户端的IP,看了源码没有找到提供的api,后来一顿百度,在stackoverflow 找到了解决方案,经过测试可以使用,总结了一下, 下边是 ...

  9. PHP利用websocket实现客户端请求ws协议功能

    最近项目需要,利用websocket实现PHP对ws协议的请求,这里PHP是作为一个客户端通过ws协议请求服务,而不是作为服务端,这个首先要区分下. ws协议是websocket的东西,现在也有很多东 ...

最新文章

  1. CCF201503-4 网络延时(100分)
  2. PHP任何类转对象访问
  3. 2019ICPC(南京) - super_log(欧拉降幂)
  4. python多线程模块_python 多线程模块参考
  5. SpringBoot2.0整合Mybatis-Plus多数据源
  6. python原理及代码_lightgbm原理以及Python代码
  7. Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4
  8. 例3.6 二叉搜索树 - 九度教程第36题(二叉排序树)
  9. 金蝶K3采购价格管控杂谈
  10. Linux系统简介、安装RHEL7系统、RHEL7基本操作
  11. HC-05蓝牙模块主从机通信
  12. Android 中 shape 各种属性详细介绍
  13. 纯JS写一个用苹果序列号查询生产信息的小工具
  14. 汪海Python爬虫(一)抓取网页的含义和URL基本构成
  15. 微信支付消费者投诉消息推送接入企业微信群
  16. 【错误记录/Blender】python中使用bpy模块
  17. ExcelUtils工具类(Java,poi)
  18. 德勤2020技术趋势报告 | 洞察5大重点趋势和12种宏观科技力量
  19. 自媒体真的很赚钱吗?收益来源都有哪些?这篇文章告诉你
  20. excel删除空格之后的字符

热门文章

  1. python 3.6.5 shell_linux安装python3.6.5
  2. ubuntu mysql 操作_Ubuntu系统下MySQL数据库基本操作
  3. CentOS二进制安装Kubernetes
  4. 又把锅甩给中国!苹果和解给了300多亿,但高通业绩预测并不乐观
  5. 联想MWC大秀另一面AI实力,BAT为此转型以求
  6. 命令行快速部署Exchange2010
  7. 《R语言机器学习:实用案例分析》——1.3节使用函数
  8. JAVA编写的一个简单的计算器
  9. 无法识别的属性“decompressionEnabled”处理方法
  10. Gitter - 高颜值GitHub小程序客户端诞生记 1