Android WebSocket即时通信

简介:   HTTP与WebSocket响应方式区别  WebSocket存在的理由  我们已经有了 HTTP 协议,为什么还需要另一个协议?因为只靠Http通信有一个缺陷:通信只能由客户端发起,HTTP 协议做不到服务器主动向客户端推送信息。这种单向请求的特点,注定了如果服务器有连续的状态变化,服务端想主动通知客户端,就难以实现。因此,工程师们一直在思考,有没有更好的方法,而 WebSocket 就是这样诞生的。

  HTTP与WebSocket响应方式区别

  WebSocket存在的理由

  我们已经有了 HTTP 协议,为什么还需要另一个协议?因为只靠Http通信有一个缺陷:通信只能由客户端发起,HTTP 协议做不到服务器主动向客户端推送信息。这种单向请求的特点,注定了如果服务器有连续的状态变化,服务端想主动通知客户端,就难以实现。因此,工程师们一直在思考,有没有更好的方法,而 WebSocket 就是这样诞生的。

  WebSocket其特点包括:建立在 TCP 协议之上,服务器端的实现比较容易与 HTTP 协议有着良好的兼容性,默认端口也是 80 和 443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器数据格式比较轻量,成教性能开销小,通信高效可以发送文本、二进制数据协议标识符是 ws(如果加密,则为 wss),服务器网址就是 URL使用Java-WebSocket库进行简单通信

  在经过对比之后,我选择了Java-WebSocket这个开源框架,毕竟star数量也是蛮高的,有质量保证。 Java-WebSocket库github地址。

  1.引入库

  implementation "org.java-websocket:Java-WebSocket:1.5.1"代码示例

  2.创建WebSocketClient类

  public class WSClient extends WebSocketClient {

  public WSClient(URI serverUri) {

  super(serverUri);

  }

  public WSClient(URI serverUri, Draft protocolDraft) {

  super(serverUri, protocolDraft);

  }

  @Override

  public void onOpen(ServerHandshake handshakedata) {

  }

  @Override

  public void onMessage(String message) {

  }

  @Override

  public void onClose(int code, String reason, boolean remote) {

  }

  @Override

  public void onError(Exception ex) {

  }

  }回调方法含义:

  onOpen():连接成功回调,获取握手数据

  onMessage():接收消息回调,获取接收数据

  onClose():关闭连接回调,获取关闭信息

  onError():连接异常回调,获取异常信息

  3.与ws协议或wss协议地址通信,创建Uri,这里用例子 ws://echo.websocket.org 。

  URI uri=URI.create("ws://echo.websocket.org");

  4.创建WSClient示例,通过onMessage()方法接收信息。

  WSClient wsClient=new WSClient(uri) {

  @Override

  public void onMessage(String message) {

  Log.e("info", "收到消息 " + message);

  }

  };

  5.发送信息,可以发送String类型和byte[]类型

  wsClient.send("传给你信息");温馨提示:

  在封装WebSocket使用时,需要注意心跳检测和重连,间隔时间后需要校验,如果中断需要重连;在适当的退出位置调用close()关闭连接;与服务端通信需要协定好传递的json对象;注意需要校验登录的地方。

目录
相关文章
|
3月前
|
XML JSON Java
Android App开发即时通信中通过SocketIO在客户端与服务端间传输文本和图片的讲解及实战(超详细 附源码)
Android App开发即时通信中通过SocketIO在客户端与服务端间传输文本和图片的讲解及实战(超详细 附源码)
235 0
|
3月前
|
JSON 语音技术 Android开发
【Android App】在线语音识别功能实现(使用云知声平台与WebSocket 超详细 附源码)
【Android App】在线语音识别功能实现(使用云知声平台与WebSocket 超详细 附源码)
56 0
|
3月前
|
JSON Java 语音技术
【Android App】实现在线语音合成功能(使用云知声平台和WebSocket 超详细 附源码)
【Android App】实现在线语音合成功能(使用云知声平台和WebSocket 超详细 附源码)
173 0
|
Android开发
Android WebSocket长链接使用Stomp协议【精品】
Android WebSocket长链接使用Stomp协议【精品】
|
存储 Java API
Android即时通讯设计——腾讯IM接入和WebSocket接入
之前项目的群聊是用数据库直接操作的,体验很差,消息很难即时反馈,所以最后考虑到了使用腾讯的IM完成群聊的接入,不过中途还是有点小坎坷的,接入完成之后发现体验版一个群聊只有20人,当时看到体验版支持100个用户也就忍了,现在一个群聊只能20用户,忍不了了,所以暂时找到了**WebSocket**作为临时的解决方案(等有钱了再换),同时支持50个用户在线聊天,也算还行,勉强够用,下面就介绍两种实现方案的接入,正文即将开始~~
452 0
Android即时通讯设计——腾讯IM接入和WebSocket接入
|
设计模式 调度 开发工具
Android中 使用 WebSocket 实现消息通信
Android中 使用 WebSocket 实现消息通信
2179 5
Android中 使用 WebSocket 实现消息通信
|
JavaScript Android开发 Web App开发
js判断是否安装某个android app,没有安装下载该应用(websocket通信,监听窗口失去焦点事件)
js判断如果安装了android app,则调起app, 没有安装,则直接下载应用。提供两种解决方案,一种是websocket通信,一种是监听页面失去焦点事件
2893 0
|
Web App开发 JavaScript Android开发
Android--WebSocket
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/79625691         WebSocket 是一种双向通信协议,在建立连接后,WebSocket服务器和 Browser/Client Agent 都能主动的向对方发送或接收数据,就像 Socket一样。
1353 0
|
1月前
|
前端开发 网络协议 JavaScript
在Spring Boot中实现基于WebSocket的实时通信
在Spring Boot中实现基于WebSocket的实时通信