jee websocket搭建总结
1、使用框架spring+springmvc+mybatis+jdk7+tomcat7+maven
2、基本原理:
a. WebSocket协议是一种双向通信协议,它建立在TCP之上,同http一样通过TCP来传输数据,但是 它和http最大的不同有两点:
1.WebSocket是一种双向通信协议,在建立连接后,WebSocket服务器和Browser/UA都能主动地向对方发送或接收数据,就像Socket一样,不同的是WebSocket是一种建立在Web基础上的一种简单模拟Socket的协议;
2.WebSocket需要通过握手连接,类似于TCP它也需要客户端和服务器端进行握手连接,连接成功后才能相互通信。
b.struts 和 websocket 是2条处理请求的路,被struts 匹配上了 ,自然就到不了 websocket的处 理逻辑,(http和ws是两种不同的请求协议,注意框架的拦截器(过滤器))
3、客户端:
<html> <head><title>Title</title><style>div {margin-left: auto;margin-right: auto;}</style> </head> <body onLoad="startWebSocket()"> <script type="text/javascript">function clog(title) {console.log(title);}var ws = null;function startWebSocket() {if ('WebSocket' in window) {try {ws = new WebSocket("ws://127.0.0.1:80/websocket/tui");} catch (e) {clog("1");}} else if ('MozWebSocket' in window) {ws = new MozWebSocket("ws://127.0.0.1:80/websocket/tui");} else {clog("websocket not support");}ws.onmessage = function (evt) {say(evt.data);};ws.onclose = function (evt) {clog("close!");};ws.onopen = function (evt) {clog("open");};}function sendMsg() {ws.send(document.getElementById('writeMsg').value);}function say(msg) {var div = document.createElement("div");div.innerHTML = msg;document.body.appendChild(div);}</script> <div onClick="say('d')">WebSocket聊天室</div> <div style="border:1px solid #09F"></div> <input type="text" id="writeMsg"/> <input type="button" value="send" onClick="sendMsg()"/></body> </html>
4、服务端:
@ServerEndpoint(value = "/websocket/tui") public class WebSocketDemo{private static final String GUEST_PREFIX = "Guest";private static final AtomicInteger connectionIds = new AtomicInteger(0);private static final Set<WebSocketDemo> connections = new HashSet<>();private final String nickname;private Session session;public WebSocketDemo() {nickname = GUEST_PREFIX + connectionIds.getAndIncrement();}//建立连接 @OnOpenpublic void start(Session session) {this.session = session;connections.add(this);String message = String.format("* %s %s", nickname, "has joined.");System.out.println(message);}//接受消息 @OnMessagepublic void incoming(String message) {System.out.println(message.toString());//broadcast(filteredMessage); broadcast(message.toString());}//客户端关闭了连接 @OnClosepublic void end() {connections.remove(this);String message = String.format("* %s %s", nickname, "has disconnected.");System.out.println(message);//broadcast(message); }//WebSocket服务出错 @OnErrorpublic void onError(Throwable t){//log.error("Chat Error: " + t.toString(), t);System.out.println("server has an error!");}private static void broadcast(String msg) {for (WebSocketDemo client : connections) {try {synchronized (client) {client.session.getBasicRemote().sendText(msg);}} catch (IOException e) {//log.debug("Chat Error: Failed to send message to client", e); connections.remove(client);try {client.session.close();} catch (IOException e1) {// Ignore }String message = String.format("* %s %s",client.nickname, "has been disconnected.");broadcast(message);}}} }
注意事项:
1、访问拦截器
2、注意部署的包冲突,例如:javax.websocket只是编译需要,而发布不需要,maven依赖注意适用范围
附:
<!--websocket编译需要,发布不需要--> <!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-coyote --> <dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-coyote</artifactId><version>7.0.12</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-juli --> <dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-juli</artifactId><version>8.5.3</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.websocket/javax.websocket-api --> <dependency><groupId>javax.websocket</groupId><artifactId>javax.websocket-api</artifactId><version>1.1</version><scope>provided</scope> </dependency>
转载于:https://www.cnblogs.com/yuan951/p/6245845.html
jee websocket搭建总结相关推荐
- 使用WebSocket搭建一个智能聊天系统
大家都知道WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信--允许服务器主动发送信息给客户端. 自从html5支持websocket以后 ...
- Nodejs+webSocket搭建多人聊天室
NodeJs+webSocket搭建多人聊天室 准备的东西: 第一步:安装插件并且完善服务端 第二步 :搭建客户端并与服务端的通信 第三步 :添加CSS样式 第四步:总结 今天花了一个上午的时间去学习 ...
- webSocket搭建简易聊天室(后端实现)
准备材料 一个可以测试websocket的网站:http://coolaf.com/tool/chattest consul(服务注册中心) 1. 搭建环境 新建spring项目的操作略过,引入依赖 ...
- rudesocket如何使用_[WebSocket入门]手把手搭建WebSocket多人在线聊天室(SpringBoot+WebS...
前言 本文中搭建了一个简易的多人聊天室,使用了WebSocket的基础特性. 源代码来自老外的一篇好文: 本文内容摘要: 初步理解WebSocket的前后端交互逻辑 手把手使用 SpringBoot ...
- netty案例,netty4.1中级拓展篇五《基于Netty搭建WebSocket,模仿微信聊天页面》
前言介绍 本章节我们模仿微信聊天页面,开发一个基于Netty搭建WebSocket通信案例.Netty的应用方面非常广:聊天.MQ.RPC.数据等等,在5G到来的时候更加需要大量数据传输,Netty的 ...
- swoole各种服务器初步搭建
1.TCP搭建 <?php $host = '192.168.50.66'; $port = 9501; $serv = new swoole_server($host,$port); $ser ...
- .net core 和 WPF 开发升讯威在线客服系统:使用 WebSocket 实现访客端通信
本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程. 文章目录列表请点击这里 对于在线客服与营销系统,访客端是指浏览网站的互联网用户,或是通过APP.微信等 ...
- websocket 超时重新连接
之前写了一篇怎么用websocket搭建智能聊天的一个功能,然后有人反馈我,问我下面这个问题 浏览器端怎么处理 websocket 超时重新连接?如果断网情况下,然而网络恢复后的重连接? 今天告诉你们 ...
- nodejs websocket 实现简易聊天室功能
文章目录 1. 服务端 app.js 代码 2. 客户端 app.html 代码 3. 样式代码 app.css 4. nodemon 辅助开发 首先说明,以下代码都是基于 Nodejs+webSoc ...
最新文章
- Vue+axios配置踩坑记录
- html导航去下划线,纯CSS实现导航栏下划线跟随的示例代码
- Oracle11g新特性注意事项
- 《操作系统》课程设计报告——用JAVA语言模仿实现“吃水果”问题
- Java集合框架:Arrays工具类
- ADO.NET中在C/S模式中使用的连接池
- python3 class init_python3 module中__init__.py的需要注意的地方
- 深入了解HashMap
- 创业过程中一定会引进纯资金投资人
- F2工作流引擎之 工作流运转模型(三)
- 【转】关于python中re模块split方法的使用
- e盾服务端源码_学习ZooKeeper源码,就从这篇开始吧
- 视觉测量为什么要考虑畸变
- C++ 入门5 ---- 类和动态内存分配(一)
- 2016matlab打开toolbox,MATLAB2016添加工具箱toolbox方法,有截图
- BGLL算法 C++实现
- SAP License:第三只眼看财务-留存收益与职业道德
- store buffer and invalidate queues
- 首届“中科杯”全国软件设计大赛获奖名单揭晓
- 如何用python爬取豆瓣图书 Top 250
热门文章
- ci获取当前url链接的分组,控制器,方法
- 用Java或Jsp向数据库存取二进制图片
- Bitmap 索引 vs. B-tree 索引:如何选择以及何时使用?——2-5
- 使用临界区 CRITICAL_SECTION 实现互斥
- Django modules模块
- 2018-03-03-解决win下凭据删除不干净而无法登录共项目录的问题
- 一个封装的使用Apache HttpClient进行Http请求(GET、POST、PUT等)的类。
- 2017.07.05 第五组 NABCD+用户原型+用户调研
- 禁止冒名顶替Exchange用户发送邮件
- Java虚拟机学习 - 类加载器(ClassLoader)