您的位置:首页 > 编程语言 > Java开发

第一篇文章:WebSocket的概念和实战(JAVA版)

2017-04-24 10:58 148 查看

一:WebSocket是什么?

他是一个客户端可以随时随地和服务端进行通信的一个技术。


二:如何学习WebSocket

包括两个,前端和后端的。前端主要是HTML5技术。后端我将用JAVA来实现。

首先看一下前端发送的请求报文,截取一部分如下

(暂且抄袭网上报文,测试成功后改为自己测试的报文)

GET /webfin/websocket/ HTTP/1.1
Host: localhost
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: xqBt3ImNzJbYqRINxEFlkg==
Origin: http://localhost:8080 Sec-WebSocket-Version: 13


跟Http协议看起来很相似嘛。不过,还是有几个没见过。

Upgrade: websocket


叫服务端给老子升级为WebSocket协议

Sec-WebSocket-Key: 密文

这是客户端发给服务端一个 base64 编码的密文。服务端接受后也要返回一个密文给客户段,否则客户端会闹情绪

接下来看一下服务端返回给客户端的报文

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: 密文


Sec-WebSocket-Accept的值当然就是服务端返回给客户端的密文了

HTTP/1.1 101 Switching Protocols 表示服务端接受了升级为WebSocket的请求。

其他的报文内容就不解析了,我们又不是搞协议的,知道大概的流程就OK了。

服务端程序编写-加依赖

首先创建一个项目,可以是Maven的web项目,或者是普通的web项目。但是建议创建一个Maven的web项目,加jar包很简单。

为什么我要这么说,因为接下来我们要加一个jar包,用于支持我们的webSocket。

poi.xml只要加上这个依赖就行了

<dependency>
<!-- webSocket的JAVA包 -->
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.1</version>
</dependency>


当然技术日新月异,各位还是去仓库找找看有没有更新的依赖包吧。

那个,没建Maven项目的童鞋们,去老老实实下载jar加到classpath下面吧。

后端代码流程

1:

首先建一个webSocket类,在类上加一个注解

@ServerEndpoint(“/echo”)

表示注解的这个类是一个WebSocket类,并且访问这个webSocket的路径是/echo

注意:这个类必须要有个无参的默认构造函数

这种实现的webSocket的方式遵循标准 JSR356 规范实现

也有一种实现是Tomcat高版本自定义的api。

这里不解释另一种了

2:

利用注解,写webSocket的方法

@OnOpen注解的方法是当有新的连接连接到服务器时调用的方法

可以添加的参数:Session session

连接的会话信息,可以用该对象通过服务端传送信息给客户端。

@OnMessage注解的方法用于接受传入的客户端信息

可以添加的参数:String message,Session session

第一个参数是客户端传送来的信息,第二个参数见上

@OnClose注解的方法用于当webSocket连接关闭时

可以添加的参数:Session session, CloseReason reason

第二个参数是关闭的原因,通过reason.getReasonPhrase()可以获取连接关闭的原因,如果没有原因的话返回null

@onError注解的方法用于当webSocket连接发生错误时

可以添加的参数:Throwable t

第一个参数是异常对象,怎么用就不用我说了吧

PS:Session对象的几个常用方法

getBasicRemote().sendText();可以向这个会话所属的客户端发生消息

getId()获取这个会话的唯一标识符

其他的自己摸索

前端页面编写

首先new WebSocket(url)对象

url里面写ws://服务端ip地址:端口/web项目名/webSocket的注解名

(@ServerEndpoint(“/echo”)的echo就是注解名)

然后写一些触发事件

//当Websocket连接时触发该函数
ws.onopen = function (){
}
//当发送信息时调用
ws.onmessage = function(evt){
console.log(evt.data);
};
//当webSocket连接断开时调用
ws.onclose = function(evt){
};
//当发送异常时调用
ws.onerror = function(evt){
};


注:

需求:实现实时的web聊天系统,当有用户上线时,另外一个用户可以知道他上线了。暂且就这样
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  websocket java html5