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

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

javaweb + websocket实现客户端的更多相关文章

  1. 开源的C#实现WebSocket协议客户端和服务器websocket-sharp组件解析

    很久没有写博客了(至少自己感觉很长时间没有写了),没办法啊,楼主也是需要生活的人啊,这段一直都在找工作什么的.(整天催我代码的人,还望多多谅解啊,我会坚持写我们的项目的,还是需要相信我的,毕竟这是一个 ...

  2. WebSocket安卓客户端实现详解(三)–服务端主动通知

    WebSocket安卓客户端实现详解(三)–服务端主动通知 本篇依旧是接着上一篇继续扩展,还没看过之前博客的小伙伴,这里附上前几篇地址 WebSocket安卓客户端实现详解(一)–连接建立与重连 We ...

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

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

  4. C#实现WebSocket协议客户端和服务器websocket sharp组件实例解析

    看到这篇文章的题目,估计很多人都会问,这个组件是不是有些显的无聊了,说到web通信,很多人都会想到ASP.NET SignalR,或者Nodejs等等,实现web的网络实时通讯.有关于web实时通信的 ...

  5. swoolefy PHP的异步、并行、高性能网络通信引擎内置了Http/WebSocket服务器端/客户端

    近半年来努力付出,项目终于要正式结项了,团队4人经历了很多困难,加班加点,最终完成了!剩下的时间将总结一下在该项目中用到知识和遇到问题.今天就从swoole说起!项目中实现异步大文件传输的功能,在服务 ...

  6. WebSocket桌面客户端工具

    考虑到WebSocket的诸多优点和未来的趋势,去年底把服务端通讯全部由HTTP改成WebSocket,期间为了方便测试,做了这个小工具.共享出来以方便有同样需求的程序员. 下载的压缩包里含有源代码和 ...

  7. websocket服务器+客户端

    <?php $demo = new ws('192.168.90.47',12345); $demo->run(); class ws { //当前服务端主连接 private $curr ...

  8. springboot整合websocket实现客户端与服务端通信

    定义  WebSocket是通过单个TCP连接提供全双工(双向通信)通信信道的计算机通信协议.此WebSocket API可在用户的浏览器和服务器之间进行双向通信.用户可以向服务器发送消息并接收事件驱 ...

  9. [PHP] php作为websocket的客户端实时读取推送日志文件

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

随机推荐

  1. 十分钟学会Java8的lambda表达式和Stream API

    01:前言一直在用JDK8 ,却从未用过Stream,为了对数组或集合进行一些排序.过滤或数据处理,只会写for循环或者foreach,这就是我曾经的一个写照. 刚开始写写是打基础,但写的多了,各种乏 ...

  2. 【工具篇】接口测试神器 -- Postman 入门教程

    一.Postman概述 (1)工具介绍 Postman是一个接口测试工具,一款非常流行的API调试工具.在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将请求 ...

  3. 一名合格的Web安全工程师之成长路径

    最近经常听到公司的招聘专员反馈应聘者简历“水分”太大,尤其是技术岗位,例如Web安全工程师,明明是初级阶段的菜鸟,就敢写资深Web安全工程师:在几个项目做一些基础打杂的工作,就敢写带过团队,项目经验丰 ...

  4. ASP.NET Core2.2+Quartz.Net 实现web定时任务

    作为一枚后端程序狗,项目实践常遇到定时任务的工作,最容易想到的的思路就是利用Windows计划任务/wndows service程序/Crontab程序等主机方法在主机上部署定时任务程序/脚本. 但是 ...

  5. pyspark列合并为一行

    将 dataframe 利用 pyspark 列合并为一行,类似于 sql 的 GROUP_CONCAT 函数.例如如下 dataframe : +----+---+ | s| d| +----+-- ...

  6. Python 中的设计模式详解之:策略模式

    虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用.<设计模式:可复用面向对象软件的基础>一书中有 23 个模式,其中有 16 个在动态语言中“不见了,或者简化了”. ...

  7. 浅谈MySQL架构体系

    一  数据库和数据库实例 在MySQL的学习研究中,存在两个非常容易混淆的概念,即数据库和数据库实例.在MySQL中,数据库和数据库实例定义如下: 数据库:存储数据的集合: 数据库实例:操作数据库的集 ...

  8. Vue.js 学习笔记 第2章 数据绑定和第一个Vue应用

    本篇目录: 2.1 Vue实例与数据绑定 2.2 指令与事件 2.3 语法糖 学习任何一种框架,从一个Hello World应用开始是最快了解该框架特性的途径. 我们先从一段简单的HTML代码开始,感 ...

  9. Dynamics CRM中跨域调用Web API 2

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复224或者20160611可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  10. Mysql使用中文字段排序的实现--order by

    在处理排序规则的时候,有时候我们会需要选择用一些中文字段来排序,实现我们在工作中的需求,下面是在处理排序的时候,适用的方式展示. SELECT t.lawcheckcolumnid AS id,t.c ...