tomcat+websocket实现
来源:互联网 发布:unity3d 性能测试工具 编辑:程序博客网 时间:2024/06/06 02:10
</pre><span style="font-size:24px;"><strong>前言:WebSocket技术是HTML5的一种协议,它实现的浏览器与服务器全双工通信。</strong></span><p><span style="font-size:24px;"><strong>现在很多的实时通讯技术,一般采用的都是轮询方式,设置一个时间间隔,比如说3秒,不断的向服务器发出HTTP request,然后由服务器返回数据给客户端。这时候就会出现一个问题。比如:我们后台5-10秒产生一个新数据,怎么去定义请求时间隔呢?而且,不断的请求服务器,势必给它带来额外的压力。而WebSocket的优势显而易见。浏览器与服务器仅需要一次握手动作,之后他们之间就构成了一条快速通道,两者之间可以相互推送数据。下面我们就一起来看怎么实现这种websocket技术。</strong></span></p><p><pre name="code" class="java"><strong><span style="font-size:18px;">1、客户端</span></strong>
客户端代码很简单,通过下面代码即可完成。
<!DOCTYPE html><html> <head> <title>MySocket</title> <link rel="stylesheet" href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css"> <link rel="stylesheet" href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap-theme.min.css"> <script src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script> <script src="//cdn.bootcss.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> <script type="text/javascript"> var webSocket = null; var flag = true;//全局标记位,标记浏览器是否支持websocket $(function(){ if(!window.WebSocket){ $("body").append("<h1>你的浏览器不支持WebSocket</h1>"); flag = false; return; } }); function startConnect(){ if(flag == false){ return; } var url = "ws://localhost:8080/Web/websocket"; webSocket = new WebSocket(url); webSocket.onerror = function(event) { onError(event); }; webSocket.onopen = function(event) { onOpen(event); }; webSocket.onmessage = function(event) { onMessage(event); }; } function onMessage(event) { $(".well").append("<li>" + event.data + "</li>"); } function onOpen(event) { $(".well").append("<li>连接至服务器</li>"); } function onError(event) { $(".well").append("<li>连接服务器发生错误</li>"); } function sendMessage(){ var msg = "[" + $("#username").val() + "]:" + $("#message").val();//获取发送信息 webSocket.send(msg);//向服务器发送消息 $("#message").val("");//清空消息 } function stopMessageBtn(){ webSocket.close(); $(".well").append("<li>服务器已停止</li>"); } </script> </head> <body> <ul class="well"> <li>提示:点击开始连接将连接到服务器</li> </ul> <input type="button" class="btn btn-default" value="开始连接" id="startBtn" onclick="startConnect()" /><br/><br/> 输入名称:<input id="username" value="<%=(int)(Math.random() * 1000) %>" style="width: 50px;margin-right:5px;" /> <input id="message" class="form-control" /> <input type="button" class="btn btn-default" value="发送消息" id="sendMessageBtn" onclick="sendMessage()" /> <input type="button" class="btn btn-default" value="停止消息" id="stopMessageBtn" onclick="stopMessageBtn()" /> </body></html>
var url = "ws://localhost:8080/Web/websocket";webSocket = new WebSocket(url);<pre name="code" class="html">webSocket.send(msg)方法向服务器发送消息。
第1行代码,我们创建一个URL。参数是需要连接的服务器端的地址,同http协议使用http://开头一样,WebSocket协议的URL使用ws://开头,
另外安全的WebSocket协议使用wss://。
第2行正式建立websocket的连接。
第3行send方法向服务器发送消息,在实际的业务里,msg可以封装成我们自己所需的参数格式。
2、服务端
服务端,这里我们用TOMCAT来实现,需要注意的是,Tomcat版本需高于7.0.47。这里所使用的是tomcat7.0.69。点击下载
package com.websocket;import java.io.IOException;import java.util.Queue;import java.util.concurrent.ConcurrentLinkedQueue;import javax.websocket.OnClose;import javax.websocket.OnError;import javax.websocket.OnMessage;import javax.websocket.OnOpen;import javax.websocket.Session;import javax.websocket.server.ServerEndpoint;@ServerEndpoint("/websocket")public class WebSocketTest { /** * 存储当前有效的session对象 */ private static Queue<Session> sessionSet = new ConcurrentLinkedQueue<Session>(); @OnMessage public void onMessage(String message, Session session) throws IOException, InterruptedException { System.out.println("进入onMessage方法"); /** 注释部分为发送广播信息,即所有连接了websocket的客户端 for(Session sess:sessionSet){ sess.getBasicRemote().sendText(message); }**/ while(true){ Thread.sleep(1000); session.getBasicRemote().sendText(message); System.out.println("Session为--"+session.getId()+"--的服务器正在推送数据!"); } } @OnOpen public void onOpen(Session session) { if(sessionSet.contains(session) == false){ sessionSet.add(session); System.out.println("建立连接!Session为:"+session.getId()); } } @OnClose public void onClose(Session session) { if(sessionSet.contains(session)){ sessionSet.remove(session); } System.out.println("关闭连接!Session为:"+session.getId()); } @OnError public void onError(Session session , Throwable throwable) { System.out.println("服务器发生错误,Session为:"+session.getId() + "---" + throwable.getMessage()); onClose(session); } public static Queue<Session> getSessionSet() { return sessionSet; }}
如下图所示,需引入Tomcat所需的包
切记一点:在部署完项目,需在tomcat部署的完路径下删掉websocket包,否则客户端报错404,连接不上
0 0
- tomcat+websocket实现
- Tomcat如何实现WebSocket
- Tomcat如何实现WebSocket
- Tomcat如何实现WebSocket
- tomcat websocket 长连接实现
- Java WebSocket的Tomcat实现
- websocket+tomcat实现聊天室功能
- WebSocket简单介绍 Java后端WebSocket的Tomcat实现
- Tomcat 7的WebSocket实现(上)
- Tomcat 7的WebSocket实现(下)
- Java后端WebSocket的Tomcat实现
- WebSocket在java Tomcat中实现
- websocket+webrtc+tomcat 实现视频监考功能
- Java后端WebSocket的Tomcat实现
- Java后端WebSocket的Tomcat实现
- Java后端WebSocket的Tomcat实现
- Java后端WebSocket的Tomcat实现
- Java WEb后端WebSocket的Tomcat实现
- [JavaScript] 8.JS BOM对象
- IOS 关于取消延迟执行函数的种种。performSelector与cancelPreviousPerformRequestsWithTarget
- Django 进阶(装饰器,Mixin,信号,模式)
- Android APP的字体设置
- android 6.0sd卡内部存储 & 外部存储
- tomcat+websocket实现
- PID2 / 开心的金明
- leetcode 11
- 出题&题解
- ViewPager+Fragment+RadioGroup实现页面联动\点击切换
- 手写一个SqlHelper
- spark sql版本的单词统计代码
- <crtdbg.h> 的作用
- JSESSIONID与SESSION