您现在的位置: 天极网 > IT新闻 > 业内快讯

传智播客郑州校区深入解读WebSocket协议

Yesky天极新闻 2017-09-13 15:35 我要吐槽

  【天极网IT新闻频道】对于所有基于服务端的C/S 应用,传智播客的老师们认为:http请求仅支持请求-响应模式,限制太大,服务器无法主动发送消息给客户端,WebSocket协议既可以由服务端发起消息,也可以由客户端发起请求。

  对此,传智播客郑州校区的老师整理出了HTTP协议与WebSocket协议声明周期的比较示意图:

  websocket是基于http协议的扩展,支持长连接。服务器端需要tomcat7以上

  协议请求地址测试 public static final String WEBSOCKET = "ws://qp.hystudio.cn:9000";

  网页测试地址:http://qp.hystudio.cn:9000/service/service.htm

  如果多个客户端同时使用支持WEBSOCKET的服务端,该如何连接?传智播客郑州校区为大家整理的连接方式如下:

  传智播客为使用WEBSOCKET提供的步骤如下:

  1/创建一个websocket连接对象

  mConnection = new WebSocketConnection();

  2/创建监听器继承WebSocketConnectionHandler

  public class WebSocketConnectListener extends WebSocketConnectionHandler {}

  3/需要和服务器创建消息通道,用于和服务器的数据交互,可以发送和接收数据

  public void connect() {

  if (!isConnect()) {

  connectListener = new WebSocketConnectListener(context,mConnection, message, listener);

  try {

  mConnection.connect(WebSocket+path, connectListener);

  } catch (WebSocketException e) {

  e.printStackTrace();

  }

  }

  }

  4/与服务器发送消息前需要判断是否连接

  public boolean isConnect() {

  if (mConnection == null) return false;

  return mConnection.isConnected();

  }

  5/客户端与服务器连接成功后测试发送消息接口

  public void sendTextMessage(String sendText) {

  if (mConnection == null) {

  return;

  }

  connect();

  mConnection.sendTextMessage(sendText);

  }

  6/由于是基于http协议。也可以作为普通的request请求使用

  //连接建立成功

  @Override

  public void onOpen() {

  super.onOpen();

  LogUtils.d("%s", "WebSocketConnectListener connect");

  connection.sendTextMessage(message);

  }

  //连接断开(一般情况下是由于网络断开,或者请求参数出错)

  @Override

  public void onClose(int code, String reason) {

  super.onClose(code, reason);

  LogUtils.d("%s", "WebSocketConnectListener lost");

  if (this.listener != null) {

  this.listener.onClose(code, reason);

  }

  }

  //收到服务器消息时使用

  @Override

  public void onTextMessage(String payload) {

  super.onTextMessage(payload);

  LogUtils.d("%s", "payload = " + payload);

  if (this.listener != null) {

  this.listener.onSuccess(payload);

  }

  }

  作为一个普通的请求方式,类似http请求方式。这里自定义协议对象,封装请求参数后进行请求

  IRequest tokenRequest = new TokenRequest(context, App.getInstance().getDeviceId(), new IRequestListener() {

  @Override

  public void onSuccess(String payload) {

  TokenResponse response = JsonUtils.fromJson(payload, TokenResponse.class);

  if (response.isRequestSuccssful()) {

  DBAdapter.getInstance().addToken(response.toToken());

  App.getInstance().setToken(response.toToken());

  setToken(response.toToken().getToken());

  request.request();

  } else {

  SnackbarUtils.show((Activity) context, R.string.device_unauth);

  }

  }

  @Override

  public void onClose(int code, String reason) {

  }

  });

  tokenRequest.request();

  这里TokenRequest对象仅仅是封装了协议请求参数。详细如下

  @Path(Constants.Path.TOKENPATH)

  public class TokenRequest extends IRequest {

  private String deviceId;

  public TokenRequest(Context context, String deviceID, IRequestListener listener) {

  super(context, listener);

  this.deviceId = deviceID;

  }

  @Override

  protected String prapareMsg() {

  return "{" + "deviceId:" + deviceId + "}";

  }

  }

  以上是WEBSOCKET协议完成了一次普通的http请求。它最大的优势是和服务端建立的双向通道,既可以由客户端发起请求,也可以由服务端发起请求。之前的自主研发消息推送基本上都是基于客户端轮询的方式,效率低并且浪费资源。此外,HTTP请求的请求头很长,虽然和服务器建立连接时可能发送的是一个很少的数据,但这样也占用了服务器资源。然而,WEBSOCKET在服务端和客户端之间的标头信息很小,而且还可以降低服务端的资源浪费。

  所以,传智播客郑州校区也希望大家在工作中能够抓住相关问题的关键,了解编程技术的本质,那么在以后的工作中就会很轻松。另外,如果你想了解编程,想学习IT,那么就来传智播客郑州校区吧!

评论
* 网友发言均非本站立场,本站不在评论栏推荐任何网店、经销商,谨防上当受骗!
今日更新
1湖南电信1元享2月无限量套餐
湖南电信优惠

湖南电信又推出一个政策优惠,不过是仅针对新用户,1元可享受2个月的无限…

2电视机挂墙上还是放电视柜上?
电视机放置

随着电视越来越轻薄,很多家庭也开始把电视柜上的电视挂在墙上。两者有什么…

3李彦宏:无人驾驶离量产不远了
无人驾驶

今天上午,2017百度世界大会今天在北京国贸大酒店和北京嘉里大酒店举行…

4评论:携程网和它的四位猪队友
携程虐童事件

前前后后出现的四位“猪队友”的神助攻却让携程事件得到了一度失控的助推。

5双11荣耀手机创国产机新纪录
荣耀手机

此次双十一手机大战,荣耀销量和销售额双双得冠,赢得了自己的“荣耀时刻”…

热门文章
1每日IT极热:红米Note5现身京东
IT极热1114

天极网IT新闻汇:近日,有网友发现京东已经悄然上架了红米Note 5。

2双11荣耀手机创国产机新纪录
荣耀手机

此次双十一手机大战,荣耀销量和销售额双双得冠,赢得了自己的“荣耀时刻”…

3评论:携程网和它的四位猪队友
携程虐童事件

前前后后出现的四位“猪队友”的神助攻却让携程事件得到了一度失控的助推。

4苹果iPhone X的Face ID被破解
苹果iPhone X

一个破解Face ID的事例再次出现,相比之前的来说,这次的更让人有些…

5IT极热:iPhone X屏幕现绿线Bug
IT极热1111

每日IT新闻集汇:有不少苹果用户反映称,其手上的iPhone X屏幕出…

6李彦宏:无人驾驶离量产不远了
无人驾驶

今天上午,2017百度世界大会今天在北京国贸大酒店和北京嘉里大酒店举行…

7iPhone X故障频发:再陷掉漆门
iPhone X故障

从屏幕到听筒再到如今的最新的“掉漆门”,苹果的这一十周年献礼还真是坎坷…

8天猫双11交易额3分钟突破100亿
天猫

全球剁手党期待的天猫双11购物狂欢节正式拉开序幕,全球庞大的交易额快速…

9OPPO R11和R11s现在入手哪款好
OPPO R11s

既然你打算买OPPO R系列,那么在此就不跟你详细赘述两款手机机具体配…

10莱迪思FPGA助力网络边缘领域
莱迪思FPGA

2017年11月8日,在上海闵行区莱迪思上海研发中心的会议办公室中,莱…

每日IT极热