Native Socket.IO and Android
来源:互联网 发布:终端是什么意思mac 编辑:程序博客网 时间:2024/06/05 03:23
原文链接地址:http://socket.io/blog/native-socket-io-and-android/
在本教程中我们将学习如何创建一个聊天客户端用socket . io Node. JS做为聊天服务器 ,我们的 nativate安卓客户端 ! 如果你想直接跳转到代码,它在 GitHub 。 否则,继续读下去!
#介绍
跟随,首先克隆存储库: socket.io-android-chat 。
应用程序具有以下特点:
- 发送消息到所有用户加入到房间。
- 每个用户加入或者离开时通知。
- 一个用户开始输入信息时通知。
Socket.IO提供了一个面向事件的API,可以在所有网络、设备和浏览器。 非常健壮的(甚至作品背后的公司代理!)和高性能,这是非常适合多人游戏或实时通信。
#安装的依赖关系
第一步是安装Java Socket。 输入输出端与 Gradle 。
对于这个应用程序,我们将依赖项添加到 build.gradle
:
// app/build.gradledependencies { ... compile 'com.github.nkzawa:socket.io-client:0.3.0'}
我们必须记住添加网络许可 AndroidManifest.xml
。
<!-- app/AndroidManifest.xml --><manifest xmlns:android="http://schemas.android.com/apk/res/android"> <uses-permission android:name="android.permission.INTERNET" /> ...</manifest>
现在我们可以在android上使用socket.IO!
#在Activity和Fragment使用Socket
首先,我们必须初始化Socket.io 的一个新实例。如下:
import com.github.nkzawa.socketio.client.IO;import com.github.nkzawa.socketio.client.Socket;private Socket mSocket;{ try { mSocket = IO.socket("http://chat.socket.io"); } catch (URISyntaxException e) {}}@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mSocket.connect();}
IO.socket()
返回Socket http://chat.socket.io
使用默认选项。 注意,方法缓存结果,所以你可以得到一个相同的 Scocket从任何Activity或Fragment实例的url。
我们显式调用 connect()
在这里建立连接(与JavaScript客户端)。 在这个程序中,我们使用 onCreate
生命周期回调,但它实际上取决于您的应用程序。
#发射事件
发送数据看起来如下。 在这种情况下,我们发送一个字符串,但你也可以做JSON数据 org.json 包,甚至还支持二进制数据!
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 是 双向的 ,这意味着我们可以向服务器发送事件,但也随时在通信服务器可以发送事件。
然后我们可以Socket监听事件 onCreate
生命周期回调。
@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mSocket.on("new message", onNewMessage); mSocket.connect();}
我们监听 new message
事件从其他用户接收消息。
import com.github.nkzawa.emitter.Emitter;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); } }); }};
这就是 onNewMessage
的样子。 一个侦听器的一个实例 Emitter.Listener
,必须实施 call
方法。 你会注意到里面的call()
包装的 Activity# runOnUiThread()
,这是因为回调总是另一个线程从Android UI线程里面调用,因此我们必须确保将消息添加到UI线程的视图上。
#套接字状态管理
因为一个Android活动有自己的生命周期,我们也应该仔细管理套接字的状态,以避免内存泄漏等问题。 在这个程序中,我们将关闭套接字连接,删除所有的听众 onDestroy
回调的活动。
@Overridepublic void onDestroy() { super.onDestroy(); mSocket.disconnect(); mSocket.off("new message", onNewMessage);}
调用 off()
删除new message()的侦听器事件。
#进一步的阅读
如果你想探索更多的,我建议你看看:
- 这个程序的其他特征。他们只是实现了
发出()
,在()
和()
。 - 套接字的细节。 IO Java客户机。 它支持JS客户机的所有特性。
- 许多其他伟大的套接字。 IO实现创建的社区!
- Native Socket.IO and Android
- Native Socket.IO and Android demo
- android native socket correspond
- android native socket correspond
- Android native Socket实现
- android local native socket
- Android网络优化之Native Socket
- Android网络优化1--Native Socket
- native and java performance on android
- Lottie for Android, iOS, and React Native
- React Native 配置环境(iOS and Android)
- Socket.io-client android 部分源码解析
- Android Java端的Socket.io-client
- Android使用socket.io实现即时通讯
- 基于Socket.IO实现Android聊天功能
- Reverse Proxy Web Sockets with Nginx and Socket.IO
- Building real time app with Socket.io and Node.js
- socket IO
- Wireshark Filter的用法
- [GIT] 分支与标签
- 图片验证码2
- http免费接口测试公布
- 图结构练习——最短路径
- Native Socket.IO and Android
- .net framework 4.0后连接Oracle问题
- sql 时间范围查询条件
- 快速为所有数组元素赋相同的值以及在switch中的应用
- 性能测试(Performance Testing)杂谈
- 正则表达式学习笔记(一)——使用正则表达式的分析方法
- hdu5188(带限制条件的01背包)
- 马尔可夫模型
- Paxos分析