有点时间.研究了一下.发现Tomcat7.0.27 和jetty 都有支持.
把这个几天研究的结果记录一下
检索资料:
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,有兴趣的测试吧
上源码:
相关推荐
tomcat-websocket.jar
tomcat7-websocket.jar
tomcat实现websocket.rar所需jar包。
需要注意的是,虽然这种方法可以解决IE8的WebSocket兼容性问题,但它依赖于Flash,而Flash已经被大多数现代浏览器逐步淘汰。因此,对于仍在使用这些旧浏览器的用户,建议尽量引导他们升级浏览器,或者提供其他如Ajax...
WebSocket.jar是Apache JMeter工具的一个扩展插件,用于支持对WebSocket协议进行性能和负载测试。WebSocket是一种在客户端和服务器之间建立持久性连接的协议,它允许双向数据传输,即服务器和客户端可以同时发送数据...
"websocket.jar" 和 "catalina.jar" 都是与WebSocket技术相关的Java库。 `websocket.jar` 是WebSocket的Java实现,它可能包含了WebSocket服务器端的API和实现,允许开发者创建支持WebSocket协议的应用。这个库通常...
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
在本项目中,"简单实现了websocket功能:websocket客户端、winformsocket客户端",意味着我们有两个关键部分:WebSocket服务器端和基于WinForm的客户端。 WebSocket客户端通常是一个应用程序,它通过WebSocket协议...
`java_websocket.jar`库自动处理握手过程,开发者只需提供相应的HandshakeImpl类实现自定义握手逻辑。 - **BinaryFrame**和**TextFrame**:WebSocket帧可以携带二进制或文本数据,对应于这两个类,开发者可以根据...
在Tomcat7中,由于Tomcat对WebSocket的支持是通过Java EE 7规范实现的,因此,如果你的Web应用需要用到WebSocket功能,比如实时聊天、股票更新、在线游戏等场景,就需要这个JAR文件。通常,它需要与Tomcat的...
const wss = new WebSocket.Server({ port: 8080 }); wss.on('connection', (ws) => { console.log('客户端已连接'); ws.on('message', (message) => { console.log(`接收到客户端消息: ${message}`); // ...
- 首先,创建一个WebSocket服务器端点类,该类需要继承自`javax.websocket.Endpoint`或实现`javax.websocket.ServerEndpoint`注解标注的类。在该类中,你可以定义`onOpen`、`onClose`、`onMessage`等方法,分别处理...
总结,"jsmpeg+websocket.rar"提供的源码实现了一个利用WebSocket传输RTSP视频流,并通过JSMPEG在Web浏览器中进行解码和播放的系统。该方案特别适合对低延迟有要求的实时视频应用场景,例如监控系统、远程教育、在线...
在这个基于Tomcat的WebSocket开发示例中,我们将深入探讨如何利用WebSocket技术来实现服务器与客户端之间的双向交互。 首先,我们需要确保运行环境满足要求,即Tomcat版本至少为7.0.47。Tomcat从7.0版本开始支持...
在本文中,我们将深入探讨如何使用Go语言和jsonrpc库来构建一个基于Websocket的客户端,以便与服务端进行交互并处理接收到的通知消息。首先,让我们了解这些关键概念: 1. **Go语言(Golang)**:由Google开发的...
在Tomcat中,为了启用WebSocket,开发者需要在服务器配置中加入相应的WebSocket支持,然后在应用代码中创建WebSocket服务器端点(通常通过实现`javax.websocket.Endpoint`或其子类)。 以下是一些关键的WebSocket...
客户端则需要创建一个继承自`org.eclipse.jetty.websocket.client.WebSocketClient`的类,并实现`org.eclipse.jetty.websocket.api.RemoteEndpoint`接口,用以发送和接收消息。 在项目中,我们可以看到`.project`...