javaweb + websocket实现客户端
程序员文章站
2022-06-04 11:06:11
最近需要完成一个javaweb项目,但是没有和数据库连接而是通过websocket通讯实现和服务器端数据交互。我搜了好多,网上大部分都是通过页面websocket连接本地服务器或连接异地服务器,但是这些都把连接地址暴露在了外面,不是我想要的。本人希望websocket连接、数据处理等都是在java后 ......
最近需要完成一个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");
注:原创作品,欢迎关注,一起学习一起进步!
上一篇: spring之旅第六篇-事务管理
下一篇: Java开发面试题整理(2019春招)