最近接到老大指示,研究下WebSocket是个神马东东,接到指示后疯狂百度,四天下来把网上的demo试了N次,但没一次成功,还买了一本入门的书,按书上的第一个demo,最后的结果是,tomcat运行正常,但是ws访问一直失败。当然最后找到了原因,我不得不说,网上那些demo其实没错(大部分),只是有些关键点没说明白,不然我也不会瞎折腾四天。
介绍WebSocket的内容我就不说了,网上一大堆,这篇文章主要讲解下,java实现简单的webSocket通信,希望对同样和我一样刚开始学习WebSocket的朋友有点帮助!!!
一、环境:tomcat8.5.12 + jdk1.8.0_121,另外需要依赖一个jar包:Java-WebSocket-1.3.0.jar,eclipse最好用3.6以上,我的是Version: Luna Release (4.4.0),听说3.6及以上版本才支持WebSocket。
二、准备好以上的环境后,开始新建一个Web项目:
1.java编写WebSocket服务端,其实这个类相当简单,只是简单的在接收到客户端消息后告诉客户端接收到的消息,代码如下:
import javax.websocket.OnMessage;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/websocket/demo")//这里是一个类注解,告诉虚拟机该类被注解为一个WebSocket端点
public class MyServer {
@OnMessage //这里是方法注解,在接收到客户端的消息时触发
public String echo(String clientMessage){
return "收到来自客户端的消息:" + clientMessage;
}
}
到此服务器端就完成了。
2.编写客户端,这里用一个html来实现:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>WebSocket Client</title>
<script type="text/javascript" language="javascript">
var websocket;
function init()
{
output = document.getElementById("output");
}
function send()
{
var wsUri = "ws://localhost:8080/WebSocketDemo1/websocket/demo";
writeToScreen("Connecting to : "+ wsUri);
websocket = new WebSocket(wsUri);
websocket.onopen = function(evt)
{
writeToScreen("Connect Success!");
doSend(document.getElementById("textID").value);
};
websocket.onmessage = function(evt)
{
writeToScreen("Received Message: "+ evt.data);
websocket.close();
};
websocket.onerror = function (evt)
{
writeToScreen('<span style="color:red;">ERROR:</span>'+evt.data);
};
}
function doSend(message)
{
websocket.send(message);
writeToScreen("Send Message : "+message);
}
function writeToScreen(message)
{
var pre = document.createElement("p");
pre.style.wordWrap = "break-word";
pre.innerHTML = message;
output.appendChild(pre)
}
window.addEventListener("load", init, false);
</script>
</head>
<body>
<h1>WebSocket Client</h1>
<div style="text-align:left;">
<form action="">
<input onclick="send()" value="Send Message" type="button">
<input id="textID" name="message" value="Hello Web Socket" type="text">
<br>
</form>
</div>
<div id="output"></div>
</body>
</html>
到这里,客户端就完成了。
三、这步也是我在网上看的demo没有描述详细的地方:发布WebSocket服务端程序,将项目直接copy到tomcat的webapps目录下如图:
启动服务,然后访问项目的首页(IE10或以上,谷歌浏览器,具体可搜下哪些浏览器支持):
ps:1.在服务器端程序中,注解类的参数:/websocket/demo,这个与在jsp页面中ws地址后的一致,如果服务器端这样写:/demo,则jsp中的uri为:ws://localhost:8080/WebSocketDemo1/demo
2.在tomcat中发布程序时,一定要注意,webapps下项目点进去后一定要能找到WEB-INF这个文件夹,我开始时就是因为eclipse建好项目后直接放到该目录下,但是在建项目时,classes文件保存目录没设置好,一直没成功。
- 大小: 36.5 KB
- 大小: 68.8 KB
- 大小: 45.3 KB
- 大小: 60.1 KB
分享到:
相关推荐
在标题提到的"Java Web Project开发WebSocket服务端/客户端"项目中,开发者选择了Jetty作为服务器平台。Jetty 7.0版本的WebSocket API与后续版本(如9.0及以上)有较大差异。在Jetty 9.0之后,WebSocket API进行了...
在Java中实现WebSocket客户端和服务端的连接,主要涉及到以下几个关键知识点: 1. **WebSocket协议**: WebSocket协议是基于TCP的,旨在提供更低的延迟和更高的效率,适合需要频繁交互的应用场景,如在线游戏、聊天...
Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息示例代码;Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息示例代码;Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息示例代码
本资源包含的是Java实现的WebSocket服务端和客户端的源码,这对于学习和理解WebSocket的工作原理以及如何在Java环境中应用WebSocket非常有帮助。下面将详细解释这些知识点: 1. **WebSocket协议基础**:WebSocket...
标题中的“Netty实现Java服务端和C#客户端联通”是指使用Netty作为Java服务器框架,与C#客户端(使用DotNetty库)进行通信的一种技术实现。这涉及到跨平台的网络通信,以及两个不同编程语言间的交互。 Netty是Java...
本文将详细探讨两种主要的方法——利用`HttpSession`和`@PathParam`来区分不同的WebSocket客户端。 #### 二、使用`HttpSession`识别不同客户端 ##### 1. 理论基础 `HttpSession`是Java Servlet API中提供的一种...
java写的websocket客户端,包含心跳监测。 此架包可解决问题:系统使用websocket 访问远程上的实时数据,但是有时候会停止更新实时数据,只要重启了自己的系统,就会继续更新数据了,此包可以完美解决此问题。
这个"java写的一个简单的websocket服务端"示例是一个很好的起点,用于理解如何使用Java来实现WebSocket服务端。 在Java中,WebSocket的实现主要依赖于`javax.websocket` API,这个API是Java标准EE 7及更高版本的一...
环境配置 开发环境配置为: JDK 8 IntelliJ IDEA 2020.1.2 x64 Springboot集成的Websocket ...在Spring内,WebSocket实例以WebSocketSession形式存在,每个session都代表了一个服务端与客户端的会话。
`WebSocketClient.java`和`WebSocketServer.java`是实现WebSocket协议的关键文件,分别代表了客户端和服务器的实现。 **WebSocket客户端**: 1. **初始化连接**:客户端首先通过HTTP Upgrade请求与服务器建立...
基本的websocket服务端 ,客户端是基于微信小程序开发的,目前可通过服务端来获取微信用户基本信息并保存到数据库, 聊天内容也可保存到数据库 ,目前可单聊和群聊 【项目资源】: 包含前端、后端、移动开发、操作系统、...
描述中的"socket通信即时服务端源码 客服端服务端"进一步说明了这个压缩包的内容,它包含的是WebSocket服务端的源代码,可能还包括客服端(client-side)的实现。Socket是网络编程中的基础概念,是进程间通信的一种...
WebSocket是一种在客户端和服务器之间建立持久连接的协议,它允许双方进行全双工通信,即数据可以在任意方向上流动,而无需反复建立和关闭连接。WebSocket协议被广泛应用于实时通信场景,例如在线游戏、聊天应用、...
- 在安卓应用中实现WebSocket服务端相对复杂,因为Android系统并非设计为服务器角色。可以使用线程或者IntentService来处理服务器逻辑。 - 服务端同样需要监听特定端口,接收并响应连接请求。使用`ServerSocket`类...
在"Netty WebSocket服务端"的实现中,我们首先需要了解Netty的ChannelHandlerContext,它是Netty的核心组件,包含了处理I/O事件和发送数据的所有方法。当我们监听到WebSocket连接建立时,会创建一个WebSocket的通道...
WebSocket协议的核心在于创建一个持久的连接,允许数据在客户端和服务器之间双向流动。与HTTP不同,WebSocket连接一旦建立,就可以保持开放,直到客户端或服务器一方关闭连接。这种特性对于实时应用,如在线聊天、...
而WebSocket则允许建立持久的连接,使得数据能够在客户端和服务器之间双向流动,极大地优化了实时应用,如聊天室、在线游戏、股票交易等场景。 Java WebSocket API是Java EE 7标准的一部分,它提供了一种在Java...
1. **源代码**:实现WebSocket客户端和服务端的编程语言源代码,可能是用Java、Python、Node.js等编写,这些代码将处理建立连接、发送和接收数据的逻辑。 2. **API文档**:可能包含有关如何使用这个客户端和服务端...
在"StriveEngine.SimpleDemo"这个示例中,可能包含了一个简单的WebSocket客户端和服务端的实现。客户端通常会使用JavaScript的WebSocket API来创建连接,发送和接收数据。服务器端则可以使用各种编程语言(如Node.js...
在本例中,我们将探讨如何使用WebSocket从服务端获取图片并在HTML5浏览器上显示,服务端采用Java注解方式实现,并在Tomcat8应用服务器上进行调试。 1. WebSocket基础: WebSocket协议是HTTP/1.1的扩展,通过握手...