您现在的位置: 天极网 > 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每日IT极热:小米7或采用刘海屏
IT极热0123

天极网IT新闻汇:网上曝出了小米7的正面照,采用的是iPhone X同…

2碎了的iPhone X为啥俩月修不了
AppleCare+

“一站式”的AppleCare+,买来的是iPhone X两个月换不掉…

3百度副总裁邬学斌已确认辞职
百度

据多家媒体爆料,百度副总裁邬学斌已递交离职申请,即将离开百度。

4罗永浩爆料锤子科技或将要改名
锤子科技

锤子科技罗永浩次爆料,由于地域问题,锤子科技将在不久以后改名。

5微软索尼前高管哈里森加盟谷歌
谷歌游戏

今日早些时候,哈里森宣布将重新回到科技世界,担任谷歌公司副总裁兼总经理…

热门文章
1张小龙:好的产品,自己会说话!
张小龙谈产品

“我一直认为一款好的产品是自己会说话的,我们尽量让产品自己说话。”张小…

2IT极热 苹果微信公众号上线
IT极热0118

IT新闻集汇:今日,苹果正式上线了苹果公司的官方微信公众号“Apple…

3中国移动12月净增1561万4G用户
中国移动4G

今日,2017年12月,中国移动净增移动用户数为325.3万户,4G用…

4微信不只有"跳一跳"小游戏!
微信跳一跳

你知道除了“跳一跳”,微信还推出了其它有意思的小游戏吗?

5这有一份支付宝隐藏功能菜单!
支付宝新功能

随着小程序的日益火爆,支付宝早已经不仅仅是付款软件那么简单了!

6搭建搜索引擎与物理世界的连接
360搜索杨康

2017年12月24日,在第五届CCF中国计算机协会BDCI大赛,36…

7每日IT极热:小米7或采用刘海屏
IT极热0123

天极网IT新闻汇:网上曝出了小米7的正面照,采用的是iPhone X同…

8微软索尼前高管哈里森加盟谷歌
谷歌游戏

今日早些时候,哈里森宣布将重新回到科技世界,担任谷歌公司副总裁兼总经理…

9手机在飞机上使用却不能插耳机
航空解禁

手机虽然可以在飞机上开机,但还是有很多限制的,必须要开启飞行模式等等……

10百度副总裁邬学斌已确认辞职
百度

据多家媒体爆料,百度副总裁邬学斌已递交离职申请,即将离开百度。

每日IT极热