测试一下HTML5的websocket功能,实现了客户端→服务器实时推送信息到客户端,包括推送图片:
websocket实现MessageInbound类 onTextMessage()/onBinaryMessage()方法负责信息的推送,canvas负责绘画,看代码自己研究比较好,源码在后面
demo的服务器:tomcat 7.0.47,
浏览器为支持websocket version 13版本,
注意:引入jar包在tomcat的lib目录下:catalina.jar tomcat-coyote.jar,发布项目后需要删掉,否则包冲突!每个浏览器的websocket版本不同 需要不断测试 慎用!!!
先创建一个服务初始化类 SocketService ,一个servlet
package com.websocket;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.catalina.websocket.MessageInbound;
public class SocketService extends HttpServlet {
private static List<MessageInbound> socketList;
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
SocketService.socketList = new ArrayList<MessageInbound>();
super.init(config);
}
public static List<MessageInbound> getMessageInbound() {
return SocketService.socketList;
}
}
再创建WebSocketImp,实现WebSocketServlet类
package com.websocket;
import javax.servlet.http.HttpServletRequest;
import org.apache.catalina.websocket.StreamInbound;
import org.apache.catalina.websocket.WebSocketServlet;
public class WebSocketImp extends WebSocketServlet{
protected StreamInbound createWebSocketInbound(String arg0,
HttpServletRequest arg1) {
// TODO Auto-generated method stub
return new WebSocketInboundImp();
}
}
然后是MessageInbound 的实现类
package com.websocket;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import org.apache.catalina.websocket.MessageInbound;
import org.apache.catalina.websocket.WsOutbound;
public class WebSocketInboundImp extends MessageInbound {
/**
* 打开
*/
protected void onOpen(WsOutbound outbound) {
// TODO Auto-generated method stub
SocketService.getMessageInbound().add(this);
super.onOpen(outbound);
}
/**
* 关闭
*/
protected void onClose(int status) {
// TODO Auto-generated method stub
SocketService.getMessageInbound().remove(this);
super.onClose(status);
}
/**
* 流处理
*/
protected void onBinaryMessage(ByteBuffer arg0) throws IOException {
// TODO Auto-generated method stub
for (MessageInbound bmsg : SocketService.getMessageInbound()) {
ByteBuffer bb = ByteBuffer.wrap(arg0.array());
WsOutbound wb = bmsg.getWsOutbound();
wb.writeBinaryMessage(bb);
wb.flush();
}
}
/**
* 字符处理
*/
protected void onTextMessage(CharBuffer arg0) throws IOException {
// TODO Auto-generated method stub
for (MessageInbound msgib : SocketService.getMessageInbound()) {
CharBuffer cb = CharBuffer.wrap(arg0);
WsOutbound wb = msgib.getWsOutbound();
wb.writeTextMessage(cb);
wb.flush();
}
}
}
接着看web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>SocketService</servlet-name>
<servlet-class>com.websocket.WebSocketImp</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SocketService</servlet-name>
<url-pattern>/web</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>sload</servlet-name>
<servlet-class>com.websocket.SocketService</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
最后是界面,比较丑,
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<script type="text/javascript">
var ws;
function web(){
if('WebSocket' in window){
ws = new WebSocket("ws://localhost:8080/websocket/web");
}else{
alert("不支持 websocket");
}
ws.onopen = function(evt){
//alert("op");
}
ws.onclose =function(evt){
alert("close");
}
ws.onmessage = function(evt){
var msg = evt.data;
if("[object Blob]" != msg){
var msgdiv = document.getElementById("msgtext");
var span = document.createElement("span");
span.innerHTML = msg+"<br />";
msgdiv.appendChild(span);
}else{
var msgdiv = document.getElementById("msgtext");
var span = document.createElement("span");
var br = document.createElement("br");
var can = document.createElement("canvas");
var context = can.getContext("2d");
var image = new Image();
image.onload = function () {
//image.height
context.clearRect(0, 0, can.width, can.height);
context.drawImage(image, 0, 0, can.width, can.height);
}
image.src = URL.createObjectURL(msg);
span.appendChild(can);
span.appendChild(br);
msgdiv.appendChild(span);
}
}
ws.onerror = function(evt){
alert("error");
}
}
function sendmsg(){
ws.send("游客 ("+new Date().toLocaleTimeString()+")<br />"+document.getElementById("msg").value);
}
function sendbmsg(){
var inputElement = document.getElementById("bmsg");
var fileList = inputElement.files;
for ( var i = 0; i < fileList.length; i++) {
//发送
ws.send("游客 ("+new Date().toLocaleTimeString()+")");
//读取文件
var reader = new FileReader();
reader.readAsArrayBuffer(fileList[i]);
//文件读取完毕后该函数响应
reader.onload = function loaded(evt) {
var binaryString = evt.target.result;
ws.send(binaryString);
}
}
return false;
}
</script>
<body onload="web();">
<div>
<h3>testing...</h3>
<div id="msgtext">
</div>
<div>
<input type="text" name="msg" id="msg" />
<button onclick="sendmsg();">发送</button><br />
<input type="file" name="bmsg" id="bmsg" />
<button onclick="sendbmsg();">发送</button>
</div>
</div>
</body>
</html>
一个效果图:多个不同的浏览器发信息,实现同步推送
分享到:
相关推荐
在海康的案例中,WebSocket被用来实现实时的视频流传输,这在传统的HTTP协议下是无法做到的,因为HTTP协议是基于请求-响应模型的,不支持服务器主动推送。 Vue.js是一个流行的JavaScript框架,常用于构建用户界面。...
springboot+websocket+mysql,实现实时聊天系统,简单demo。包括login 登录页、register 注册页、friend_list 好友列表、message_conver聊天视图 四个页面。
在这个"基于HTML5 WebSocket的实时协同绘图Demo"中,我们可以深入理解如何利用WebSocket构建实时的多人协作应用。 WebSocket协议是一种在客户端和服务器之间建立长连接的协议,对比传统的HTTP协议,WebSocket允许...
标题中的“推送h264流的简易websocket服务器”是指使用C++编程语言实现的一个服务器程序,它的功能是通过WebSocket协议向客户端推送H264编码的视频流。H264是一种高效的视频编码标准,广泛应用于网络视频传输,因为...
【标题】:“Uniapp使用GoEasy实现websocket实时通讯” 【描述】:本文主要探讨了如何在Uniapp项目中集成GoEasy服务,以实现基于websocket的实时通讯功能。Uniapp作为一个跨平台的开发框架,允许开发者编写一次代码...
WebSocket是Web交互技术的一种革新,它为实时双向通信提供了标准协议。在传统的HTTP协议中,客户端与服务器之间的通信是请求-响应...在实际项目中,这种技术可以应用于在线聊天、股票实时推送、游戏同步等多种场景。
WebSocket Demo可能包含了一个简单的示例,演示了如何在前后端之间建立WebSocket连接,并实现服务器向客户端推送消息的功能。这个示例通常包括服务器端代码和客户端HTML/JavaScript代码,可以帮助初学者快速理解...
总结来说,这个"WebSocket推送"的Java Demo展示了WebSocket技术在Java环境下的应用,包括服务器端和客户端的编程模型,以及在Tomcat服务器上的部署步骤。通过学习和实践这个Demo,开发者能够深入理解WebSocket的工作...
在这个"WebSocket测试demo"中,我们看到的是一个基于Java的WebSocket应用,它适用于JDK 1.8及更高版本,并且能在Tomcat 8以上的服务器环境中运行。 首先,让我们来了解WebSocket的核心概念。WebSocket协议是在HTTP...
- 数据流传输:例如股票市场实时报价、视频直播、物联网设备的数据推送等。 6. **注意事项**: - 安全性:使用WebSocket时,应考虑使用HTTPS来加密传输数据,防止中间人攻击。 - 连接管理:处理大量并发连接时,...
理解这个WebSocket的小demo,开发者可以深入学习WebSocket协议的工作原理,掌握Java实现WebSocket的方法,以及如何在多线程环境下进行消息推送,这对开发实时应用程序是非常有帮助的。同时,这个实例也可以作为一个...
本项目基于Spring平台,整合websocket协议,实现一个简易web聊天室的功能。...5.添加好友上线提醒和下线提醒的功能,当有好友上线或下线时自动通知所有其他在线人,不要刷新页面可看到实时在线用户列表。
WebSocket是一种在客户端与服务器之间建立长连接的协议,它提供了双向通信的能力,使得服务器可以主动向客户端推送数据。在Web应用中,Spring框架提供了对WebSocket的支持,使得开发者能够方便地集成WebSocket功能。...
一个非常简洁的 Golang Websocket 推送中心 Demo,代码清晰易懂。 功能: 1. 客户端登录到 websocket 推送中心,用户认证 2. 服务端给客户端推送消息,只需要通过 HTTP 接口。 如果你想学习 Golang 或者用 Golang ...
java-webSocket是免费的,集成java-webSocket开源而成的一个比较完整的demo,实现了客户端向服务端发送消息,以及接收由服务端主动发送给客户端的消息,以及开启心跳,断连后重新连接。适用于需要双方相互主动互发...
- 当检测到数据库有新数据时,后端通过已经建立的WebSocket连接,将更新的消息推送给前端。 - 前端页面接收到WebSocket消息后,刷新显示最新的数据库内容,无需手动刷新整个页面。 总结来说,这个项目通过...
总结,SpringBoot结合WebSocket能有效实现双向通信和实时推送,通过合理配置和处理,可以支持客户端重连以及浏览器的桌面通知功能。这对于构建实时应用,如在线聊天室、实时股票监控等场景,是非常实用的。
基于spring websocket实现广播及点对点推送功能Demo。 开发环境:IntelliJ IDEA 2016.3.4 运行环境:jre1.8.0_131 服务器:Tomcat 8.5 测试步骤: 1.配置好环境,主要是maven和tomcat; 2.编译并运行,使用不同的...
WebSocket是HTML5的一项重要技术,它为Web应用提供了全双工、低延迟的通信机制,使得服务器能够主动向客户端推送数据,打破了传统的HTTP请求-响应模式。在"WebSocket网页实时聊天"的应用中,WebSocket扮演了关键角色...
而WebSocket则是一种在客户端和服务器之间建立长时间连接的协议,允许双向通信,即服务器可以主动向客户端推送数据。将WebSocket与Spring MVC集成,可以创建实时、低延迟的应用,例如聊天应用、实时股票更新或在线...