tomcat+websocket实现

原创 2016年05月30日 19:49:16
</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,连接不上



Tomcat7 配置 WebSocket

这是本人第一次写技术性的博客,写的好与不好还请各位多多波波。哈哈~     由于项目的要求需要使用WebSocket,公司的服务器是用C++写的,而我之前是名Java程序员,所以处于好奇变用Tomc...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Tomcat如何实现WebSocket

WebSocket协议属于HTML5标准,越来越多浏览器已经原生支持WebSocket,它能让客户端和服务端实现双向通信。在客户端和服务器端建立一条WebSocket连接后,服务器端消息可直接发送到客...

websocket+java+tomcat推送数据到前台

原地址:http://blog.chenzuhuang.com/archive/28.html 步骤: 1、新建html页面,代码如下 2、新建java类,代码如下 3、要求:Tomcat从7...

Tomcat 学习进阶历程之Socket

Tomcat 学习进阶历程之Socket         在前一篇了又重新学习了一下HTTP协议,对它的工作过程和原理又加深了认识。那么当我们通过浏览器访问一个在线资源的时候,浏览器是怎么要将我们的...

浅谈用java搭建web服务器之Socket编程——更好的理解Apache、Tomcat等软件的工作模式

之前做web应用一直是在本地装个Apache、Tomcat之类的软件,然后把做好的网页文件放在他们的工作目录下(如Apache的htdocs),然后打开浏览器输入127.0.0.1或localhost...

Java socket 实现tomcat服务器

一个基于java的web服务器使用这两个重要的类:java.net.Socket和java.net.ServerSocket,并通过HTTP消息进行通信。在实现Web服务器之前有必要简要说明一下超文本...

Tomcat原理学习---Socket类

java.net.Socket类: 套接字Socket类是网络连接的一个端点,可以让一个应用从网络中读取和写入数据.  其中一个构造方法:接收主机名称和端口号: public(java.lang...
  • zcm482
  • zcm482
  • 2014年06月12日 22:29
  • 486

Tomcat7中WebSocket初探

HTML5中定义了WebSocket规范,该规范使得能够实现在浏览器端和服务器端通过WebSocket协议进行双向通信。使用WebSocket的优点显而易见:主动的双向通信模式:相对于使用Ajax的被...
  • whucyl
  • whucyl
  • 2014年02月28日 21:47
  • 34141

tomcat7和tomcat8的websocket区别

tomcat8真正支持jsr-356(包含对websocket的支持), tomcat7部分版本的websocket实现不兼容jsr-356。websocket实现tomcat7.x与tomcat8....
  • JA0000
  • JA0000
  • 2017年06月06日 18:10
  • 2844
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:tomcat+websocket实现
举报原因:
原因补充:

(最多只允许输入30个字)