Native Socket.IO and Android

news/2024/7/6 2:48:07

原文链接地址:http://socket.io/blog/native-socket-io-and-android/

android chat demo

在本教程中我们将学习如何创建一个聊天客户端用socket . io Node. JS做为聊天服务器 ,我们的 nativate安卓客户端 ! 如果你想直接跳转到代码,它在 GitHub 。 否则,继续读下去!

#介绍

跟随,首先克隆存储库: socket.io-android-chat 

应用程序具有以下特点:

  • 发送消息到所有用户加入到房间。
  • 每个用户加入或者离开时通知。
  • 一个用户开始输入信息时通知。

Socket.IO提供了一个面向事件的API,可以在所有网络、设备和浏览器。 非常健壮的(甚至作品背后的公司代理!)和高性能,这是非常适合多人游戏或实时通信。

#安装的依赖关系

第一步是安装Java Socket。 输入输出端与 Gradle 

对于这个应用程序,我们将依赖项添加到 build.gradle :

// app/build.gradle
dependencies {
    ...
    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) {}
}

@Override
public 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 生命周期回调。

@Override
public 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 回调的活动。

@Override
public void onDestroy() {
    super.onDestroy();

    mSocket.disconnect();
    mSocket.off("new message", onNewMessage);
}

调用 off() 删除new message()的侦听器事件。

#进一步的阅读

如果你想探索更多的,我建议你看看:

  • 这个程序的其他特征。他们只是实现了 发出() 在() 和 () 
  • 套接字的细节。 IO Java客户机。 它支持JS客户机的所有特性。
  • 许多其他伟大的套接字。 IO实现创建的社区!

http://www.niftyadmin.cn/n/4581893.html

相关文章

Linux命令之单引号、双引号、反引号

1.单引号 ( ) 单引号&#xff0c;不具有变量置换的功能&#xff0c;即单引号会告诉shell忽略所有的特殊字符2.双引号(" ") 双引号&#xff0c;具有变量置换的功能&#xff0c;即双引号之要求忽略大多数特殊字符&#xff0c;除了$&#xff08;使用变量前导符&#xff…

iQOO5和iQOO5pro有什么区别

外观方面iQOO5还是是颇为养眼的&#xff0c;其采取上半年流行的曲面挖孔屏设计&#xff0c;得益于四周边框的极窄化处理&#xff0c;iQOO5屏占比也是十分的可观&#xff0c;背部机身方面iQOO5则为玻璃材质&#xff0c;后置摄像头以居左式矩形状排列&#xff0c;造型风格较为简约…

OkHttp各种请求方法

原文地址&#xff1a;http://blog.csdn.net/liyuchong2537631/article/details/48369403 支持 SPDY &#xff0c;共享同一个 Socket 来处理同一个服务器的所有请求 如果 SPDY 不可用&#xff0c;则通过连接池来减少请求延时 无缝的支持GZIP来减少数据流量 缓存响应数据来减少…

Linux-Nginx-生产ssl密钥对

cd /usr/local/nginx/conf yum install -y openssl # 安装使用的命令 openssl genrsa -des3 -out tmp.key 2048 //key文件为私钥 genrsa&#xff1a;生成rsa格式的私钥&#xff0c;2048是长度&#xff0c;名字叫tmp.key,且生成密码。 openssl rsa -in tmp.key -out aminglinux…

荣耀x10和小米10x的区别 哪个好

红米10X采用6.57英寸E2材质的三星AMOLED屏幕&#xff0c;支持屏幕指纹识别。红米10X正面屏幕采用了水滴屏的设计&#xff0c;相信对于屏幕有强迫症的小伙伴肯定不会喜欢&#xff01; 荣耀x10更多使用感受和评价&#xff1a;https://www.huawei.com/x10 小米10x更多使用感受和评…

iqoo5和小米10至尊纪念版 的区别 哪个好

iqoo5正面采用6.41英寸AMOLED&#xff0c;2340x1080像素的分辨率&#xff0c;120Hz屏幕刷新率&#xff1b;配色&#xff1a;皓影、星溯两款配色 小米10至尊版正面采用6.67英寸AMOLED的极点屏&#xff0c;23401080的屏幕刷新率&#xff0c;120Hz的屏幕刷新率&#xff0c;配色&am…

在Ignite中使用k-均值聚类算法

为什么80%的码农都做不了架构师&#xff1f;>>> 在本系列前面的文章中&#xff0c;简单介绍了一下Ignite的k-最近邻(k-NN)分类算法&#xff0c;下面会尝试另一个机器学习算法&#xff0c;即使用泰坦尼克数据集介绍k-均值聚类算法。正好&#xff0c;Kaggle提供了CSV…

请求消息体和响应消息体

原文连接地址&#xff1a;http://www.cnblogs.com/mydomain/archive/2012/11/05/2754487.html HTTP基于请求与响应模式的、无状态的、应用层的协议&#xff0c;常基于TCP的连接方式。HTTP允许传输任意类型的数据对象&#xff0c;HTTP协议是无状态协议。无状态是指协议对于事务处…