WebSocket详解、WebSocket入门案例

打印 上一主题 下一主题

主题 1028|帖子 1028|积分 3084

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目次

1.1 WebSocket介绍
http协议:
webSocket协议:
1.2WebSocket协议:
1.3客户端(浏览器)实现
1.3.2 WebSocket对象的相关事宜:
1.3.3 WebSOcket方法
1.4 服务端实现
服务端怎样吸取客户端发送的哀求呢?
服务端怎样推送数据给客户端呢?


1.1 WebSocket介绍

WebSocket 是一种网络通信协议。
        WebSocket是HTML5开始提供的一种在单个TCP毗连上进行全双工通信的协议。
        HTTP 协议是一种无状态、无毗连、单向的应用层协议。它采用了 哀求/相应 模子。通信哀求只能由客户端发起,服务端对哀求做出应答处置惩罚。(单向的:采用的是哀求+相应的模式)
        这种通信模子有一个弊端:HTTP协议无法实现服务器主动向客户端发起消息。
        这种单项哀求的特点,注定了假如服务器有连续的状态变化,客户端要获知就非常麻烦。大多数Web应用程序将通过频繁的异步ajax哀求实现长轮询。轮询服从低,非常浪费资源(必须不停的毗连,大概HTTP毗连始终打开)
http协议:


webSocket协议:


1.2WebSocket协议:

        WebSocket协议有两个部门,握手和数据传输
        握手时基于http协议,在数据传输阶段基于WebSocket协议
1.3客户端(浏览器)实现

  1. var ws = new WebSocket(url);
  2. //参数url格式说明: ws://ip地址:端口号/资源名称
复制代码
1.3.2 WebSocket对象的相关事宜:

变乱
变乱处置惩罚程序
形貌
open
websocket对象.onopen
毗连建立时触发
message
websocket对象.onmessage
客户端吸取服务端数据时触发
error
websocket对象.onerror
通信发生错误时触发
close
websocket对象.onclose
毗连关闭时触发
1.3.3 WebSOcket方法

WebSocket对象的相关方法:
方法
形貌
send()
利用毗连发送数据
1.4 服务端实现

Java WebSocket应用一系列的WebSocketEndpoint组成。Endpoint是一个java对象,代表WebSocket链接的一端,对于服务端,我们可以视为处置惩罚具体WebSocket消息的接口。【一个EndPoint对象和一个客户端产生逐一对应的关系】
我们可以通过两种方式定义Endpoint:


  • 编程式:继承类 javax.websocket.Endpoint并实现其方法。
  • 注解式:即定义一个POJO,并添加@ServerEndpoint相关注解
Endpoint实例在WebSocket握手时创建,并在客户端与服务端毗连过程中有用,末了在链接关闭时结束。在Endpoint接口中明确了定义与其生命周期相关的方法,生命周期方法如下:
方法
寄义形貌
注解
onClose
当会话关闭时调用。
@OnClose
onOpen
当开启一个新的会话时调用, 该方法是客户端与服务端握手乐成后调用的方法。
@OnOpen
onError
当毗连过程中异常时调用。
@OnError
服务端怎样吸取客户端发送的哀求呢?

通过为Session添加MessageHandler消息处置惩罚器来吸取消息,当采用注解方式定义EndPoint时,我们还可以通过@OnMessage注解指定吸取消息的方法。
服务端怎样推送数据给客户端呢?

发送消息则由 Remote Endpoint完成,实在例由Session维护,根据利用环境,我们可以通过Session.getBasicRemote 获取同步消息发送的实例,然后调用其 sendXxx( )方法就可以发送消息,可以通过Session.getAsyncRemote获取异步消息发送实例。
下面是一个简朴的案例:
  1. @ServerEndpoint("/robin")
  2. public class ChatEndPoint {
  3.     private static Set<ChatEndPoint> webSocketSet = new HashSet<>();
  4.     private Session session;
  5.     @OnMessage
  6.     public void onMessage(String message, Session session) throws IOException {
  7.         System.out.println("接收的消息是:" + message);
  8.         System.out.println(session);
  9.         //将消息发送给其他的用户
  10.         for (Chat chat : webSocketSet) {
  11.             if(chat != this) {
  12.                 chat.session.getBasicRemote().sendText(message);
  13.             }
  14.         }
  15.     }
  16.     @OnOpen
  17.     public void onOpen(Session session) {
  18.         this.session = session;
  19.         webSocketSet.add(this);
  20.     }
  21.     @OnClose
  22.     public void onClose(Session seesion) {
  23.         System.out.println("连接关闭了。。。");
  24.     }
  25.     @OnError
  26.     public void onError(Session session,Throwable error) {
  27.         System.out.println("出错了。。。。" + error.getMessage());
  28.     }
  29. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

慢吞云雾缓吐愁

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表