javaweb + websocket实现客户端

最近需要完成一个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连接
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技术交流:585550789

原文地址:https://blog.51cto.com/14226273/2362462

时间: 2024-10-26 16:50:40

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

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

http://blog.csdn.net/zly921112/article/details/72973054 前言 这里特别说明下因为WebSocket服务端是公司线上项目所以这里url和具体协议我全部抹去了,但我会尽力给大家讲明白并且demo我都是测试过,还望各位看官见谅 我们先粗犷的讲下流程,掌握个大概的方向,然后在深入讲解细节的实现.这里先解答一个疑惑,为啥我们这要用WebSocket而不是Socket呢,因为WebSocket是一个应用层协议很多东西都规定好了我们直接按他的规定来用就好

WebSocket桌面客户端工具

考虑到WebSocket的诸多优点和未来的趋势,去年底把服务端通讯全部由HTTP改成WebSocket,期间为了方便测试,做了这个小工具.共享出来以方便有同样需求的程序员. 下载的压缩包里含有源代码和编译好的执行程序,今天用Java 8重新编译了一次,需要JRE 8执行环境. 使用起来很简单,输入URL,点连接. 上方文本框显示最近收到消息,下发输入发送消息. 源代码也很简单,一看就懂,主要用Tyrus实现WebSocket客户端. 下载地址 WebSocket桌面客户端工具

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

WebSocket安卓客户端实现详解(三)–服务端主动通知 本篇依旧是接着上一篇继续扩展,还没看过之前博客的小伙伴,这里附上前几篇地址 WebSocket安卓客户端实现详解(一)–连接建立与重连 WebSocket安卓客户端实现详解(二)–客户端发送请求 终于是最后一篇啦,有点激动\ ( ≧▽≦ ) /啦啦啦, 服务端主动通知 热身完毕,我们先回顾下第一篇中讲到的服务端主动通知的流程 根据notify中事件类型找到对应的处理类,处理对应逻辑. 然后用eventbus通知对应的ui界面更新. 如果

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

近半年来努力付出,项目终于要正式结项了,团队4人经历了很多困难,加班加点,最终完成了!剩下的时间将总结一下在该项目中用到知识和遇到问题.今天就从swoole说起!项目中实现异步大文件传输的功能,在服务端使用了swoole,可以高效方便的实现,很多的项目其实也在用到swoole,突然间觉得swoole已经非常强大,对于phper来说,这是非常好的,可能大家都觉高大上了. 接下来将会以swoole为系列,总结一些swoole的知识,当然,官网文档有的这里就不会再多说,将会从应用场景,应用的技巧,和如

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

定义 ?WebSocket是通过单个TCP连接提供全双工(双向通信)通信信道的计算机通信协议.此WebSocket API可在用户的浏览器和服务器之间进行双向通信.用户可以向服务器发送消息并接收事件驱动的响应,而无需轮询服务器. 它可以让多个用户连接到同一个实时服务器,并通过API进行通信并立即获得响应. 案例介绍 ? 后端在接收到用户新下的订单后,通知到后台系统 服务端代码 pom.xml <dependency> <groupId>org.springframework.boo

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

首先要使用composer来下载一个第三方扩展就可以实现php的websocket客户端,直接在当前目录生成下composer.json文件就可以了composer require textalk/websocket require('vendor/autoload.php'); use WebSocket\Client; $client = new Client("ws://echo.websocket.org/"); $client->send("Hello Web

C# 实现websocket 发送客户端网页前端数据,C#和网页前端通信

今天的文章来说明如何在C#里构建我们自己的websocket服务器,已经客户端,以及如何发送数据给客户端,如何实现订阅的操作,如何实现应答模式的操作.ok,废话不多说,直接进入正题: 本库的demo源代码地址:https://github.com/dathlin/HslCommunication 如果想要联系作者,请访问官网:  http://www.hslcommunication.cn/ 联系作者及加群方式:http://www.hslcommunication.cn/Cooperation

Vue+WebSocket实现客户端与服务端通讯,前端与机器人对接

因公司突然要求做个机器人客户端,需要与机器人对接,采用了WebSocket技术实现浏览器与服务端进行联调, 前端以WebSocket协议格式发送数据到后台, 后台解析指令并将指令发送到机器人, 机器人的相关相应信息也通过后台使用WebSocket协议封装数据传输给浏览器 1 created() { 2 this.initWebSocket() 3 }, 4 methods: { 5 // 初始化weosocket 6 initWebSocket() { 7 // ws地址 8 const wsu

WebSocket html客户端

<script> var ws = new WebSocket("ws://114.215.103.25:9501"); ws.onopen = function(){  console.log("握手成功"); }; ws.onmessage = function(messageEvent){ console.debug(messageEvent.data); }; ws.onerror = function(errorEvent){     cons