WebSocket是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex),能更好的节省服务器资源和带宽并达到实时通讯,它建立在TCP之上,同HTTP一样通过TCP来传输数据,但是它和HTTP最大不同是:
WebSocket是一种双向通信协议,在建立连接后,WebSocket服务器和Browser/Client Agent都能主动的向对方发送或接收数据,就像Socket一样;
WebSocket需要类似TCP的客户端和服务器端通过握手连接,连接成功后才能相互通信。
在实现websocket连线过程中,需要通过浏览器发出websocket连线请求,然后服务器发出回应,这个过程通常称为“握手” (handshaking)。
本范例在apache-tomcat-7.0.69环境下测试通过,工程主要用到以下jar包:websocket-api.jar(Tomcat自带)、tomcat-juli-7.0.27.jar等。
Java类源码:
@ServerEndpoint("/websocket") public class MyWebsocket { private Timer timer; private static AtomicLong socketCount = new AtomicLong(); private Session session; //客户端和服务端建立链接的Websocket集合 private static CopyOnWriteArraySet<MyWebsocket> webSocketSet = new CopyOnWriteArraySet<MyWebsocket>(); /** * 建立链接 */ @OnOpen public void onOpen(Session session){ this.session = session; webSocketSet.add(this); //启动一个单独的线程,每隔一秒钟推送当前时间到web客户端 timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //batch(sdf.format(new Date())); } }, 0, 1000L); System.out.println("session count is " + socketCount.incrementAndGet()); } /** * 关闭链接 */ @OnClose public void opClose(){ webSocketSet.remove(this); if(timer != null){ timer.cancel(); timer = null; } System.out.println("session count is " + socketCount.decrementAndGet()); } /** * 服务端接收客户端发来的消息 * @param message * @param session */ @OnMessage public void onMessage(String message, Session session) { System.out.println("来自客户端的消息:" + message); batch(message); } /** * 往所有web客户端发送消息 * @param message */ private void batch(String message){ for(MyWebsocket item: webSocketSet){ try { item.sendMessage(message); } catch (IOException e) { e.printStackTrace(); continue; } } } /** * 发送消息到web客户端 * @param message * @throws IOException */ public void sendMessage(String message) throws IOException{ this.session.getBasicRemote().sendText(message); //this.session.getAsyncRemote().sendText(message); } /** * 异常处理 * @param session * @param error */ @OnError public void onError(Session session, Throwable error){ System.out.println("发生错误"); error.printStackTrace(); } }
JSP页面代码:
<%@ page language="java" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Web Socket</title> </head> <body> <input id="text" type="text" /> <button onclick="send()">Send</button> <button onclick="closeWebSocket()">Close</button> <div id="message"> </div> <script type="text/javascript"> var websocket = null; if('WebSocket' in window){ websocket = new WebSocket("ws://localhost:8080/ws/websocket"); }else{ alert('Not support websocket'); } //连接出现错误,触发该方法 websocket.onerror = function(){ setMessageInnerHTML("error"); }; //成功建立连接,触发该方法 websocket.onopen = function(event){ setMessageInnerHTML("连接已建立,可以开始群聊啦!"); } //客户端收到消息,触发该方法 websocket.onmessage = function(event){ setMessageInnerHTML(event.data); } //连接关闭,触发该方法 websocket.onclose = function(){ setMessageInnerHTML("连接已关闭!"); } //窗口关闭时,关闭websocket连接 window.onbeforeunload = function(){ websocket.close(); websocket = null; } //将消息显示在网页上 var i = 0; function setMessageInnerHTML(innerHTML){ document.getElementById('message').innerHTML = innerHTML + '<br/>' + document.getElementById('message').innerHTML; ++i; if(i > 20){ i = 0; document.getElementById('message').innerHTML = innerHTML = ""; } } //关闭连接 function closeWebSocket(){ websocket.close(); websocket = null; } //发送消息到服务端 function send(){ var message = document.getElementById('text').value; websocket.send(message); document.getElementById('text').value = ""; document.getElementById('text').focus(); } </script> </body> </html>
相关推荐
这个"WebSocketSharp 范例"是为了解决旧版.NET Framework下无法轻易使用WebSocket的问题。 首先,WebSocketSharp库提供了易于使用的API,包括创建WebSocket服务器和客户端的类。`WebSocketServer`类用于构建服务器...
学习和理解这个WebSocket通讯范例,可以帮助开发者掌握WebSocket的基本用法,从而在实时聊天应用、在线游戏、股票交易系统等需要实时数据交互的场景中应用WebSocket技术。通过分析和调试示例代码,你可以深入理解...
本资源演示了基于Spring5.3.8 版本下做的WebSocket通讯,演示了三种方式建立简单的页面方式调用WebSocket,分别是@bean模式、@Autowired模式以及xml模式,主要使用了 org.springframework.web.socket.handler....
本项目是一个基于websocket-sharp开源dll封装的在线聊天项目,服务端采用WinForm作为服务引擎。用于framwork4.5版本实现websocket。
unity3d商城付费资源,用于实现websocket客户端,有服务端范例代码
使用范例 var WebSocket = require('simple-websocket-client').WebSocket; var socket = new WebSocket('ws://my-domain.com:8080'); socket.on('open').then(function () { console.log('connected'); socket....
完整的可运行的项目,基于Sprin框架搭建,采用Spring5.3.8版本,内嵌相关的所有应用jar包,可直接在IDEA环境下运行。 演示项目包含了两部分...工程适用于使用JAVA 做双工开发的项目,同样适用于订阅发布机制的JAVA项目
在本项目中,我们将探讨如何使用Echarts,一个强大的JavaScript图表库,结合Python编程语言,通过WebSocket协议实现动态实时的数据大屏展示。 Echarts是由百度开发的开源图表库,支持丰富的图表类型,如折线图、...
使用PHP连接到websocket服务。 这3个功能使websocket进行协商和连接,并处理所需的hybi10帧编码。 范例1: if( $sp = websocket_open('echo.websocket.org',80) ) { websocket_write($sp,"hello server"); echo...
微信小程序:你猜我画小游戏编写范例源码,本小程序源码主要演示会话服务和 WebSocket 信道服务的使用方式,感觉是一个小游戏,没有玩过这种游戏,有兴趣的下载源码,可学习了解一些微信小程序环境下的游戏开发技巧...
考虑到系统的运行负载,每日高达约4.5万次的稳定消费以及每个商户平均使用2个客户端进行连接,系统需要处理近10万次的消息推送,而且还要维持大量的WebSocket连接。这样的高并发处理能力要求技术架构必须高效稳定。...
同时,还可能包含有关使用WebSocket进行实时通信的示例。 4. **多媒体处理**:这部分会讲解如何播放音频和视频,使用MediaRecorder进行录音,以及使用Camera API拍摄照片。此外,也可能包含图像处理,如使用Glide或...
书中的范例可能包括使用HttpURLConnection、OkHttp、Volley等库进行网络请求的实现。 8. **多媒体处理**:Android支持音频、视频和图像的处理。书可能涵盖如何播放媒体文件、捕获照片、裁剪图片以及使用OpenGL进行...
《C#开发范例开发大全》是刘丽霞编著的一本面向C#开发者的重要参考资料,这本书的核心价值在于其丰富的程序范例,旨在帮助读者深入理解和掌握C#编程语言的各种特性和应用场景。通过实践这些范例,开发者可以提升自己...
HTTP请求、WebSocket、Retrofit、OkHttp等库的使用是常见的范例,同时也会涉及到JSON或XML数据解析。 5. **服务(Service)**:服务是在后台长时间运行的组件,用于执行不需要用户交互的任务。范例可能包含启动服务...
"home-assistant-js-websocket" 是一个专门为前端开发者设计的开源库,用于与Home Assistant智能家居系统进行交互。这个库利用WebSocket协议,实现...同时,这个库也为其他基于WebSocket的项目提供了参考和学习的范例。
17. **网络编程**:学习TCP/IP通信,使用Socket进行网络数据传输,以及WebSocket等现代网络技术。 18. **反射与元数据**:理解C#中的反射机制,以及如何使用Assembly、Type、MethodInfo等类来操作运行时的类型信息...
它被配置为使用本机websocket,而不会尝试将naïfes解决方案用作http轮询。 { transports: ['websocket'] } 它会在连接时将消息发送到单个服务器实例。 注意,此消息应仅由单个服务器实例接收。
4. **网络编程**:Android应用常常需要与服务器进行数据交换,这涉及到HTTP请求、WebSocket通信等。你将在这里看到使用HttpURLConnection、OkHttp或Retrofit进行网络请求的示例,以及如何处理JSON或XML数据。 5. **...
使用Java Websocket实时聊天室 服务器和客户端将通过websocket相互通信,消息以JSON文件的形式发送。 与http请求答案的机制不同,由于websocket是TCP协议,因此它将遵循3步握手模型。 websocket的标准协议对于常规...