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

一: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聊天系统,当有用户上线时,另外一个用户可以知道他上线了。暂且就这样

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值