Native Socket.IO and Android

原文链接地址: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.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实现创建的社区!
时间: 2024-11-09 03:18:12

Native Socket.IO and Android的相关文章

为Phonegap Android平台增加websocket支持,使默认成为socket.io首选通

为Phonegap Android平台增加websocket支持,使默认成为socket.io首选通道选择 广而告之 使用socket.io作为跨浏览器平台的实时推送首选,经测试在各个主流浏览器上测试都确实具有良好的下实时表现.这里为推广socketio-netty服务器端实现哈,做次广告,同时预热一下: socketio-netty : 又一款socket.io服务器端实现,兼容0.9-1.0版本~ 示范目的 我们要构建一个在市面上常见浏览器上都可以正常运行的集体聊天应用,保证在IE6+,Fi

基于Node.js + socket.io实现WebSocket的聊天DEMO

原文摘自我的前端博客,欢迎大家来访问 http://hacke2.github.io 简介 最近看Node.js和HTML5,练手了一个简易版的聊天DEMO,娱乐一下 为什么需要socket.io? node.js提供了高效的服务端运行环境,但是由于浏览器端对HTML5的支持不一, 为了兼容所有浏览器,提供卓越的实时的用户体验,并且为程序员提供客户端与服务端一致的编程体验, 于是socket.io诞生. 简答来说socket.io具体以下特点: 1.socket.io设计的目标是支持任何的浏览器

Socket.IO 概述

为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3826251.html Socket.IO简述 Socket.IO用于浏览器与node.js之间实现实时通信.Socket.IO设计的目标是支持任何的浏览器,任何Mobile设备.支持主流的PC浏览器 (IE,Safari,Chrome,Firefox,Opera等),Mobile浏览器(iphone Safari/ipa

Socket.io 延伸

项目正好用到了即时通讯功能,于是研究到了webSocket技术,后来发现了可以在web.[Android].[iOS]上同时使用的解决方案,那就是SocketIO.其实现原理啥的不做介绍了,直接贴上IOS项目可能会用到的一些资源. 首先是官网:http://socket.io/这个大家都不会陌生吧~~ 1.官方推荐的Android项目:http://socket.io/blog/native-socket-io-and-android/ github上的相应地址为:https://github.

H5+MUI+Node.js+Socket.io实现即时聊天以及发送+图片压缩

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <title></title

H5+MUI+Node.js+Socket.io群组即时聊天+发送图片+图片压缩

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <title></title

反向Ajax,第3部分:Web服务器和Socket.IO

英文原文:Reverse Ajax, Part 3: Web servers and Socket.IO 前言 时至今日,用户期待的是可通过web访问快速.动态的应用.这一文章系列展示了如何使用反向Ajax(Reverse Ajax)技术来开发事件驱动的web应用.系列的第1部分介绍了反向Ajax.轮询(polling).流(streaming).Comet和长轮询(long polling).你已经了解了Comet是如何使用HTTP长轮询的,这是可靠地实现反向Ajax的最好方式,因为现有的所有

Socket.IO介绍:支持WebSocket、用于WEB端的即时通讯的框架

一.基本介绍 WebSocket是HTML5的一种新通信协议,它实现了浏览器与服务器之间的双向通讯.而Socket.IO是一个完全由JavaScript实现.基于Node.js.支持WebSocket的协议用于实时通信.跨平台的开源框架,它包括了客户端的JavaScript和服务器端的Node.js. Socket.IO除了支持WebSocket通讯协议外,还支持许多种轮询(Polling)机制以及其它实时通信方式,并封装成了通用的接口,并且在服务端实现了这些实时机制的相应代码.Socket.I

K8s Ingress Nginx 支持 Socket.io

Ingress 及 Ingress Controller 简介 Ingress:是k8s 资源对象,用于对外暴露服务,该资源对象定义了不同主机名(域名)及 URL 和对应后端 Service(k8s Service)的绑定,根据不同的路径路由 http 和 https 流量. Ingress Contoller:是一个pod服务,封装了一个Web前端负载均衡器,同时在其基础上实现了动态感知Ingress 并根据Ingress的定义动态生成前端web负载均衡器的配置文件,比如Nginx Ingre