Android使用socket.io实现即时通讯
来源:互联网 发布:java中scanner用法 编辑:程序博客网 时间:2024/05/29 18:59
简介
WebSocket是HTML5的一种新通信协议,它实现了浏览器与服务器之间的双向通讯。而Socket.IO是一个完全由JavaScript实现、基于Node.js、支持WebSocket的协议用于实时通信、跨平台的开源框架。
本文将根据 socket.io 官方提供的 socket.io-android-chat Demo 来讲解 socket.io 在android客户端实现即时通讯的一些基本操作。
附上github链接:
- Java支持库 socket.io-client-java
- Android聊天Demo socket.io-android-chat
Demo实现了以下功能:
- 基本文字聊天功能
- 每个用户加入或者离开时发送通知
- 用户开始输入信息时发送输入状态的通知
添加依赖
第一步,添加依赖到 build.gradle,如下 :
compile ('io.socket:socket.io-client:0.8.3') { // excluding org.json which is provided by Android exclude group: 'org.json', module: 'json'}
第二步,在 AndroidManifest.xml 中注册联网权限
<!-- app/AndroidManifest.xml --><manifest xmlns:android="http://schemas.android.com/apk/res/android"> <uses-permission android:name="android.permission.INTERNET" /> ...</manifest>
现在我们可以在项目中使用socket.IO了~
初始化Socket
我们可以通过 IO.socket(“URL”) 方法来获取一个 Socket 实例,其中 “URL” 为服务器地址。
Socket mSocket = IO.socket("http://chat.socket.io");
获取到 Socket 实例后,调用 connect() 方法即可与服务器建立连接。
mSocket.connect();
完整初始化代码如下:
import com.github.nkzawa.socketio.client.IO;import com.github.nkzawa.socketio.client.Socket;private Socket mSocket;{ try { //1.初始化socket.io,设置链接 mSocket = IO.socket("http://chat.socket.io"); } catch (URISyntaxException e) {}}@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //2.建立socket.io服务器的连接 mSocket.connect();}
传输数据
我们可以通过 mSocket.emit(“KEY”, “VALUE”) 的方法来向服务器发送消息,”KEY”为事件的键, “VALUE”为事件的值,值支持任意类型的数据。
对服务器发送一个”new message”事件,其值为”hi~”:
mSocket.emit("new message", "hi~");
private EditText mInputMessageView;//发送消息的方法private void attemptSend() { String message = mInputMessageView.getText().toString().trim(); if (TextUtils.isEmpty(message)) { return; } mInputMessageView.setText(""); mSocket.emit("new message", message);}
监听事件
Socket.IO 是双向传递信息的 ,这意味着我们可以随时向服务器发送事件,也可以随时响应服务器返回来的事件。
我们可以通过 mSocket.on(“KEY”, LISTENER) 方法来监听服务器返回的事件。其中 “KEY” 为事件的键, LISTENER 为监听器,监听器的类型为 Emitter.Listener() 。
mSocket.on("new message", onNewMessage);
以下为一个监听 new message 事件的示例:
@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //使用 onNewMessage 来监听服务器发来的 "new message" 事件 mSocket.on("new message", onNewMessage); mSocket.connect();}private Emitter.Listener onNewMessage = new Emitter.Listener() { @Override public void call(final Object.. args) { //主线程调用 getActivity().runOnUiThread(new Runnable() { @Override public void run() { JSONObject data = (JSONObject) args[0]; String username; String message; try { username = data.getString("username"); message = data.getString("message"); } catch (JSONException e) { return; } // add the message to view addMessage(username, message); } }); }};
Emitter.Listener() 接口在 call 方法返回服务器传来的数据,需要注意的是,call方法是在子线程中执行的,如果我们需要在call方法中更新UI,则需使用 handler 或者 runOnUiThread 将操作放到主线程中来执行。
释放资源
为避免内存泄漏等问题。 我们在socket使用完毕的时候,需要断开socket与服务器的连接,并且释放socket的监听事件。
断开服务器连接(disconnect):
mSocket.disconnect();
调用 off 方法释放监听事件:
mSocket.off("new message", onNewMessage);
在Activity结束时,释放socket:
@Overridepublic void onDestroy() { super.onDestroy(); mSocket.disconnect(); mSocket.off("new message", onNewMessage);}
- Android使用socket.io实现即时通讯
- Android Socket接口实现即时通讯
- socket.io+node即时通讯
- 基于socket.io即时通讯IM实现,webRTC实现视频通话
- Android应用socket即时通讯的实现
- Android应用socket即时通讯的实现
- 即时通讯:socket 使用
- 即时通讯:socket 使用
- 使用socket实现服务器客户端即时通讯的小例子
- Xamarin android中使用signalr实现即时通讯
- 菜鸟学习nodejs--Socket.IO即时通讯
- node.js和socket.io纯js实现的即时通讯实例分享
- 即时通讯之Socket.IO的学习,及使用nodejs 搭建websocket 聊天室
- 基于Socket.IO实现Android聊天功能
- windows使用socket.io实现群聊
- Android即时通讯实现原理
- 使用IO::Socket::INET模块实现socket编程
- PERL 使用IO::Socket::INET模块实现socket编程
- java笔试题【5】
- Java良好的编码习惯建议
- Java笔试题【6】
- three way of waterfall flow
- Java笔试题【7】
- Android使用socket.io实现即时通讯
- JSON Web Tokens的实现原理
- JAVA 基础系列之 重排序和Volatile
- Visual Basic快捷教程——流程控制
- JAVA笔试题【8】
- shipyard docker-ui集群
- python:计算在1901年1月1日至2000年12月31日间共有多少个星期天落在每月的第一天上
- 代价函数
- 前端学习-jQuery学习小笔记(1)——jQ基础以及各种选择器