`
zzc1684
  • 浏览: 1228192 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

基于Tomcat7的WebSocket.兼容IE(客户端需Flash10)

阅读更多

有点时间.研究了一下.发现Tomcat7.0.27 和jetty 都有支持.

 

把这个几天研究的结果记录一下

 

检索资料:

 

基于Tomcat的WebSocket(5月8日更新)

 

jquery websocket 插件

 

Flash Socket通信的安全策略问题 843端口

 

C++与Flex之间socket通信policy-file-request解决方案

 

https://github.com/gimite/web-socket-js   这插件用来做兼容性的

 

服务端程序直接拿 Tomcat示例源码. 代码位置见Tomcat_HOME\webapps\examples\WEB-INF\classes\websocket\chat\*

 

有几个问题备注:

 

1. Tomcat 7.0.27 版本 20秒如果不发送消息,就会掉线.  基于Tomcat的WebSocket(5月8日更新) 这里 19楼 yaolifei 童鞋的回答.我的做法就是每隔10秒发送一个字符到服务器. 好在 下一版会解决.

 

2. 当前的7.0.27版本 ,WebScoket中 request.getSession() 获取不到任何东西.经过测试观察.还会把整个当前站点的session销毁. 所以在网上也看到直接在websocketServlet中获取session.十分的不解.(设置会话属性在其他普通servlet中)

 

3. flash的安全机制问题.需要服务器另开一个843端口的socket连接.用来处理策略文件.和flex在http交互中的crossdomain类似.

 

4. 目前我处理不能获取session,是通过连接websocket时传递参数来实现的.不知道有没有其他方式

 

5. 测试过程中发现 opera , IE9 , qq浏览器(包括360这样的) 都不支持websocket . 但是遨游支持了.

 

 

 

代码片段:

 

  web.xml

 

复制代码
     <listener>  //这里用于启动和关闭843端口的socket
        <listener-class>cn.vs9.chat.listener.ServletContextListener</listener-class>
      </listener> 
    <servlet>  //这个直接抄Tomcat示例
        <servlet-name>chat</servlet-name>
        <servlet-class>cn.vs9.chat.servlet.websocket.ChatWebSocketServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>chat</servlet-name>
        <url-pattern>/chat/chat.htm</url-pattern>
    </servlet-mapping>
复制代码

 

聊天页面: web-socket-js 判断当前浏览器是否原声支持websocket,如果不支持,就使用flash

 

复制代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<title></title>
<style>
</style>
<script type="text/javascript" src="scripts/swfobject.js"></script>
<script type="text/javascript" src="scripts/jquery.js"></script>
<script type="text/javascript" src="scripts/web_socket.js"></script>
<script type="text/javascript" src="scripts/jquery.WebSocket.js"></script>

<script>
var ws;
var WEB_SOCKET_SWF_LOCATION = 'media/WebSocketMain.swf';
var WEB_SOCKET_DEBUG = true;
    $(function() {
        $("#sendBtn").on("click",send);
         connection();
    });
    
    function connection(){
           ws = $.websocket({  
                domain:"127.0.0.1", 
                protocol:"WebSocketDemo/chat/chat.htm" , 
                onOpen:function(event){  
                    showMessage("已成功登录");  
                },  
                onError:function(event){
                     alert("error:"+ event)
                },  
                onMessage:function(result){  
                    receiveMessage(result);
                },
                onClose:function(event){
                    ws = null;
                     
                }
            });  
         
    }
 
    function send(){
        if(!ws){
            alert("已经断开聊天室");
            return;
        }
         var msg=$.trim($("#messageInput").val());
         if(msg==""){return;}
         ws.send(msg);  
         $("#messageInput").val("").focus();;
    }
    
    function receiveMessage(result){
        showMessage(result);
    }
 
    function showMessage(msg){
        $("#public").append("<div>"+msg+"</div>");
    }
     
     
</script>
</head>
<body>
 <div id="public" style="height:500px;border:1px solid;"></div>
 
 
        <div class="input">
                    <input type="text" id="messageInput" onKeyDown="if (event.keyCode==13)$('#sendBtn').click()" maxlength="100" size="40" tabindex="1" /> 
                    <input type="button"  id="sendBtn" value="提交" > 
        </div>
     
</body>
</html>
复制代码

 

 

 

效果: 据说是IE8 也能,我的是IE9,有兴趣的测试吧

 

 

上源码: 

WebScoket Demo下载地址

分享到:
评论

相关推荐

    tomcat-websocket.jar

    tomcat-websocket.jar

    tomcat7-websocket.jar

    tomcat7-websocket.jar

    tomcat实现websocket.rar

    tomcat实现websocket.rar所需jar包。

    websocket兼容IE8

    需要注意的是,虽然这种方法可以解决IE8的WebSocket兼容性问题,但它依赖于Flash,而Flash已经被大多数现代浏览器逐步淘汰。因此,对于仍在使用这些旧浏览器的用户,建议尽量引导他们升级浏览器,或者提供其他如Ajax...

    websocket.jar.zip

    WebSocket.jar是Apache JMeter工具的一个扩展插件,用于支持对WebSocket协议进行性能和负载测试。WebSocket是一种在客户端和服务器之间建立持久性连接的协议,它允许双向数据传输,即服务器和客户端可以同时发送数据...

    websocket.jar+catalina.jar

    "websocket.jar" 和 "catalina.jar" 都是与WebSocket技术相关的Java库。 `websocket.jar` 是WebSocket的Java实现,它可能包含了WebSocket服务器端的API和实现,允许开发者创建支持WebSocket协议的应用。这个库通常...

    WebSocket的Java和Tomcat7使用示例

    2. **环境兼容性**:上述示例在多种环境中进行了测试,包括JDK 7+Tomcat 7.0.47/7.0.52/8.0.3和JDK 7+Glassfish 4等。 3. **注意事项**:在IDE(如Eclipse或MyEclipse)中开发时,需要正确配置Tomcat库路径,直接...

    tomcat-embed-websocket-9.0.16.jar

    tomcat-embed-websocket-9.0.16.jar

    简单实现了websocket功能:websocket客户端、winformsocket客户端

    在本项目中,"简单实现了websocket功能:websocket客户端、winformsocket客户端",意味着我们有两个关键部分:WebSocket服务器端和基于WinForm的客户端。 WebSocket客户端通常是一个应用程序,它通过WebSocket协议...

    java_websocket.jar

    `java_websocket.jar`库自动处理握手过程,开发者只需提供相应的HandshakeImpl类实现自定义握手逻辑。 - **BinaryFrame**和**TextFrame**:WebSocket帧可以携带二进制或文本数据,对应于这两个类,开发者可以根据...

    mysql-connector,websocket-api.jar,tomcat-jdbc.jar

    在Tomcat7中,由于Tomcat对WebSocket的支持是通过Java EE 7规范实现的,因此,如果你的Web应用需要用到WebSocket功能,比如实时聊天、股票更新、在线游戏等场景,就需要这个JAR文件。通常,它需要与Tomcat的...

    websocket.7z

    const wss = new WebSocket.Server({ port: 8080 }); wss.on('connection', (ws) =&gt; { console.log('客户端已连接'); ws.on('message', (message) =&gt; { console.log(`接收到客户端消息: ${message}`); // ...

    基于Tomcat实现HTML5的WebSocket

    - 首先,创建一个WebSocket服务器端点类,该类需要继承自`javax.websocket.Endpoint`或实现`javax.websocket.ServerEndpoint`注解标注的类。在该类中,你可以定义`onOpen`、`onClose`、`onMessage`等方法,分别处理...

    jsmpeg+websocket.rar

    总结,"jsmpeg+websocket.rar"提供的源码实现了一个利用WebSocket传输RTSP视频流,并通过JSMPEG在Web浏览器中进行解码和播放的系统。该方案特别适合对低延迟有要求的实时视频应用场景,例如监控系统、远程教育、在线...

    基于tomcat的websocket开发示例源码

    在这个基于Tomcat的WebSocket开发示例中,我们将深入探讨如何利用WebSocket技术来实现服务器与客户端之间的双向交互。 首先,我们需要确保运行环境满足要求,即Tomcat版本至少为7.0.47。Tomcat从7.0版本开始支持...

    go-jsonrpc-websocket.rar

    在本文中,我们将深入探讨如何使用Go语言和jsonrpc库来构建一个基于Websocket的客户端,以便与服务端进行交互并处理接收到的通知消息。首先,让我们了解这些关键概念: 1. **Go语言(Golang)**:由Google开发的...

    Tomcat WebSocket

    在Tomcat中,为了启用WebSocket,开发者需要在服务器配置中加入相应的WebSocket支持,然后在应用代码中创建WebSocket服务器端点(通常通过实现`javax.websocket.Endpoint`或其子类)。 以下是一些关键的WebSocket...

    Java Web Project开发WebSocket服务端/客户端

    客户端则需要创建一个继承自`org.eclipse.jetty.websocket.client.WebSocketClient`的类,并实现`org.eclipse.jetty.websocket.api.RemoteEndpoint`接口,用以发送和接收消息。 在项目中,我们可以看到`.project`...

Global site tag (gtag.js) - Google Analytics