您现在的位置: 天极网 > 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支付宝未来药店在郑州正式开业
支付宝药店

全国首家“支付宝未来药店”在郑州开业,支持扫脸支付、信用租赁、身份验证…

2荣耀确定6月6日发布Honor Play
荣耀

华为高级副总裁余承东近日发表微博,透露了一项被称为是“很吓人的技术”。

3未来世界一定是属于三维时代
专访孙剑峰

 可以说,孙剑峰先生是一位标准的成功企业家,同时,还是一位杰出的科技新…

4中国科技创新与自主研发的启示
魔盒产品

中兴被封杀,给中国提了个醒,发展科技创新和自主研发刻不容缓!

5大公司晨读:滴滴或下半年上市
晨读 0524

5月23日,据香港经济日报报道,网约车平台“滴滴出行”最快下半年赴港上…

热门文章
1微信支付宝520红包,滴滴顺风车
大公司晨读

晨读:微信支付宝520红包升级;滴滴顺风车恢复上线;北京地铁二维码乘车…

2晨读:百度电影票,英特尔无人车
大公司晨读

晨读:百度退出电影票业务,爱奇艺接手;英特尔获800万辆自动驾驶汽车订…

3大公司晨读:董明珠誓要做芯片
晨读 0519

日前,格力电器董事长董明珠宣布格力电器今年不分红,这是因为格力要做芯片…

4机海战术继续 小米8爆料不断
小米8

小米的机海战术还在继续,近日小米官方已确定下一场新品发布会即将在深圳举…

5晨读:腾讯家乐福智慧门店开业
晨读 0521

苹果将推出一款售价为199美元的智能音箱,不过它将被冠以Beats的品…

6晨读:中移动4G用户首现负增长
晨读 0522

三大电信运营商相继公布4月运营数据。其中,中国移动的4G用户首次出现负…

7Fitbit Versa智能手表中国发售
智能手表

5月17日,Fitbit在北京召开发布会正式发布Versa智能手表,售…

8大公司晨读:小米正式进军法国
晨读 0523

22日,在巴黎洲际酒店的发布会上,小米宣布正式进军法国市场,线上线下共…

9Max系列被砍?雷军回应:7月见
小米Max

雷军在与微博网友互动时透露,“小米Max 3估计7月份发布,现在还没准…

10积木易搭构建泛家居领域生态圈
积木易搭

2018年3月16日,积木易搭与全国多地品牌客商举行加盟合作签…

每日IT极热