android长链接服务

Android实现推送方式解决方案 本文介绍在Android中实现推送方式的基础知识及相关解决方案。推送功能在手机开发中应用的场景是越来起来了,不说别的,就我们手机上的新闻客户端就时不j时的推送过来新的消息,很方便的阅读最新的新闻信息。这种推送功能是好的一面,但是也会经常看到很多推送过来的垃圾信息,这就让我们感到厌烦了,关于这个我们就不能多说什么了,毕竟很多商家要做广告。本文就是来探讨下Android中实现推送功能的一些解决方案,也 阅读详情

在开发Android和iPhone应用程序时,我们往往需要从服务器不定的向手机客户端即时推送各种通知消息,iPhone上已经有了比较简单的和完美的推送通知解决方案,可是Android平台上实现起来却相对比较麻烦,最近利用几天的时间对Android的推送通知服务进行初步的研究。

在Android手机平台上,Google提供了C2DM(Cloudto Device Messaging)服务,起初我就是准备采用这个服务来实现自己手机上的推送功能。

Android Cloud to Device Messaging (C2DM)是一个用来帮助开发者从服务器向Android应用程序发送数据的服务。该服务提供了一个简单的、轻量级的机制,允许服务器可以通知移动应用程序直接与服务器进行通信,以便于从服务器获取应用程序更新和用户数据。C2DM服务负责处理诸如消息排队等事务并向运行于目标设备上的应用程序分发这些消息。

但是经过一番研究发现,这个服务存在很大的问题:

1)C2DM内置于Android的2.2系统上,无法兼容老的1.6到2.1系统;

2)C2DM需要依赖于Google官方提供的C2DM服务器,由于国内的网络环境,这个服务经常不可用,如果想要很好的使用,我们的App Server必须也在国外,这个恐怕不是每个开发者都能够实现的;

有了上述两个使用上的制约,导致我最终放弃了这个方案,不过我想利用另外一篇文章来详细的介绍C2DM的框架以及客户端和App Server的相应设置方法,可以作为学习与参考之用。

即然C2DM无法满足我们的要求,那么我们就需要自己来实现Android手机客户端与App Server之间的通信协议,保证在App Server想向指定的Android设备发送消息时,Android设备能够及时的收到。下面我来介绍几种常见的方案:

1)轮询:应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,例如消息排队等。而且你还要考虑轮询的频率,如果太慢可能导致某些消息的延迟,如果太快,则会大量消耗网络带宽和电池。

2)SMS:在Android平台上,你可以通过拦截SMS消息并且解析消息内容来了解服务器的意图。这是一个不错的想法,我就见过采用这个方案的应用程序。这个方案的好处是,可以实现完全的实时操作。但是问题是这个方案的成本相对比较高,你很难找到免费的短消息发送网关,关于这个方案的实现,可以参考如下链接:https://labs.ericsson.com/apis/mobile-java-push/。

3)持久连接:这个方案可以解决由轮询带来的性能问题,但是还是会消耗手机的电池。Apple的推送服务之所以工作的很好,是因为每一台手机仅仅保持一个与服务器之间的连接,事实上C2DM也是这么工作的。不过这个方案也存在不足,就是我们很难在手机上实现一个可靠的服务。Android操作系统允许在低内存情况下杀死系统服务,所以你的通知服务很可能被操作系统Kill掉了。

前两个方案存在明显的不足,第三个方案也有不足,不过我们可以通过良好的设计来弥补,以便于让该方案可以有效的工作。毕竟,我们要知道GMail,GTalk以及GoogleVoice都可以实现实时更新的。

 

Ø  采用MQTT协议实现Android推送

MQTT是一个轻量级的消息发布/订阅协议,它是实现基于手机客户端的消息推送服务器的理想解决方案。

我们可以从这里下载该项目的实例代码,并且可以找到一个采用PHP书写的服务器端实现。

架构如下所示:

wmqtt.jar 是IBM提供的MQTT协议的实现。你可以从如下站点下载它。你可以将该jar包加入你自己的Android应用程序中。

Really Small Message Broker (RSMB) ,他是一个简单的MQTT代理,同样由IBM提供。缺省打开1883端口,应用程序当中,它负责接收来自服务器的消息并将其转发给指定的移动设备。

SAM是一个针对MQTT写的PHP库。你可以从这个下载它.

send_mqtt.php是一个通过POST接收消息并且通过SAM将消息发送给RSMB的PHP脚本。

实例代码:


可以从GitHub上下载实例应用。运行该应用以后,通过手机浏览器访问http://tokudu.com/demo/android-push/,在第一个输入框输入设备ID,在第二个输入框输入想要发送的消息内容,按下“Send Push Message”按钮,你就应该可以看到手机上收到了通知了。你也可以从这个GitHub地址上下载android-push源代码,它包含了send_mqtt.php脚本。

 

Ø  采用XMPP协议实现Android推送

这是我在项目中采用的方案。事实上Google官方的C2DM服务器底层也是采用XMPP协议进行的封装。

XMPP(可扩展通讯和表示协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线探测。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息。

androidpn是一个基于XMPP协议的java开源Android push notification实现。它包含了完整的客户端和服务器端。经过源代码研究我发现,该服务器端基本是在另外一个开源工程openfire基础上修改实现的,不过比较郁闷的是androidpn的文档是由韩语写的,所以整个研究过程基本都是读源码。它的实现示意图如下:

androidpn客户端需要用到一个基于java的开源XMPP协议包asmack,这个包同样也是基于openfire下的另外一个开源项目smack,不过我们不需要自己编译,可以直接把androidpn客户端里面的asmack.jar拿来使用。客户端利用asmack中提供的XMPPConnection类与服务器建立持久连接,并通过该连接进行用户注册和登录认证,同样也是通过这条连接,接收服务器发送的通知。

androidpn服务器端也是java语言实现的,基于openfire开源工程,不过它的Web部分采用的是spring框架,这一点与openfire是不同的。Androidpn服务器包含两个部分,一个是侦听在5222端口上的XMPP服务,负责与客户端的XMPPConnection类进行通信,作用是用户注册和身份认证,并发送推送通知消息。另外一部分是Web服务器,采用一个轻量级的HTTP服务器,负责接收用户的Web请求。服务器架构如下:

最上层包含四个组成部分,分别是SessionManager,Auth Manager,PresenceManager以及Notification Manager。SessionManager负责管理客户端与服务器之间的会话,Auth Manager负责客户端用户认证管理,Presence Manager负责管理客户端用户的登录状态,NotificationManager负责实现服务器向客户端推送消息功能。

服务器端界面如下,分别对应了上述的几个功能模块:



      发送以后,我们可以在手机端看到接收的消息:

      这个解决方案的最大优势就是简单,我们不需要象C2DM那样依赖操作系统版本,也不会担心某一天Google服务器不可用。利用XMPP协议我们还可以进一步的对协议进行扩展,实现更为完善的功能。

采用这个方案,我们目前只能发送文字消息,不过对于推送来说一般足够了,因为我们不能指望通过推送得到所有的数据,一般情况下,利用推送只是告诉手机端服务器发生了某些改变,当客户端收到通知以后,应该主动到服务器获取最新的数据,这样才是推送服务的完整实现。


Android Socket通信 Socket是基于Tcp的链接,适用于长链接 Socke通讯需要客户端和服务器,客户端我们在android上编写,而服务器则选择在eclipse上编写上效果图; eclipse: 我们一共需要4个类,分别是 Server类,继承自Thread,用于建立服务器,并监听Socket的链接 MySocket类,继承自Thread,用于对Socket进行读写操作 SocketManager类,单 阅读详情

相关推荐

使用Android实现消息推送的方法

在移动应用开发中,消息推送是一种常用的功能,它可以让应用向用户发送通知、提醒或其他重要信息。在使用FCM之前,你需要在Firebase控制台注册你的应用。在这个类中,你可以处理接收到的消息,并在收到消息时显示通知。通过以上步骤,你就可以在Android应用中实现消息推送功能了。当你的后端服务器发送一条推送消息时,Android应用将收到推送通知,并显示在设备上。在你的后端服务器或者Firebase控制台上,你可以使用FCM提供的API来发送推送消息。在你的Android项目中,添加FCM SDK的依赖项。

2301_79326588的博客 1382

Android推送通知指南

在开发Android和iPhone应用程序时,我们往往需要从服务器不定的向手机客户端即时推送各种通知消息,iPhone上已经有了比较简单的和完美的推送通知解决方案,可是Android平台上实现起来却相对比较麻烦,最近利用几天的时间对Android的推送通知服务进行初步的研究。

Working harder, getting stronger! 1185

Android实战:添加推送通知功能

你可以根据需求自定义推送通知的样式,包括添加大图、按钮等。在方法中,使用来设置通知的样式和内容。本篇博客介绍了在Android应用中添加推送通知功能的步骤,包括集成Firebase Cloud Messaging (FCM)、配置后端服务器、发送推送通知以及展示通知的代码实现。推送通知功能可以提高应用的用户体验和参与度,帮助应用与用户保持实时的互动。希望本篇博客对您在移动开发中添加推送通知功能有所帮助。

2201_76125261的博客 449

Android基于MQTT协议实现的推送功能

前段时间公司需要Android端的手机群推功能,我们就通过MQTT来实现了该功能。 MQTT的官网如下 http://mqtt.org/ 关于系统的主要架构就不详述了。这关系的到职业道德问题,在这里只谈谈MQTT实现推送的功能。 在MQTT官网中http://mqtt.org/software列举出了实现了该协议的开源客户端和服务器工程和库。 我们是通过ApacheActiveCl

纸上得来终觉浅,绝知此事要躬行 6734

图信号处理中的多尺度分析:图小波变换与图傅里叶变换的对比与应用

本文深入探讨了图信号处理中的多尺度分析方法,重点对比了图小波变换(GWT)与图傅里叶变换(GFT)的技术特点与应用场景。通过分析图的拓扑结构,GWT展现出强大的局部洞察力,适用于异常检测和社区发现;而GFT则擅长全局频率分析,适合趋势分析和信号去噪。文章结合实战案例,为读者提供了方法选型指南和前沿进展,帮助开发者在生物信息学、社交网络分析等领域高效应用这些技术。

weixin_30369041的博客 406

从Axure转Figma?这篇编组、缩放、圆角、评论的对比指南帮你无缝切换

本文为资深Axure设计师提供了向Figma无缝迁移的实战指南。文章深度对比了编组、缩放、圆角、评论等核心操作,重点解析了Figma独特的自动布局、组件系统和实时协作功能,旨在帮助用户快速适应新工具,实现设计思维与工作效率的跃迁。

tomato的博客 851

android 实现与服务器的长链接 方式

http://blog.youkuaiyun.com/coffeeco/article/details/13276437 这边文章主要看服务端,使用tomcat7以上实现服务端的接收消息以及消息发送 http://autobahn.ws/android/ 这边文章主要用于介绍android客户端的连接,最下面get started教你怎么开始以及Examples是例子 最后一个api文档。 另一种方...

weixin_30527423的博客 129

BACnet/IP BBMD跨网段通信深度解析与最佳实践

本文介绍了在BACnet/IP网络中通过BBMD实现跨子网设备通信的关键配置方法。重点阐述了广播分发表(BDT)中掩码设置的重要性:使用子网掩码(255.255.255.0)会导致路由器拦截广播消息,而必须采用主机掩码(255.255.255.255)才能启用单播隧道机制,使BACnet广播消息封装为可路由的单播UDP包。文章详细说明了BDT条目的正确配置格式、BIP广播地址的作用,并提供了验证步骤,强调在跨网段场景中,正确设置掩码是确保设备发现和通信成功的关键因素。

零一架构师的专栏 1536

android 长链接 库,一个Android的Tcp Socket连接库,更方便的完成你的长链接服务

在Android开发中,经常会需要由服务端主动推送一些消息给客户端,最常见的做法就是用Tcp Socket保持长链接。为了简化这个过程,做了一个简单的依赖库来实现TCP Socket的client功能。Doc引入依赖Step 1.先配置你的project的build.gradleallprojects {repositories {···maven { url 'https://jitpack.i...

weixin_42522676的博客 668

ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO)解决办法

问题:ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: NO) 很久没用这台电脑的mysql了,今天需要连接数据库,启动数据库报错: ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: NO) 解决方法: 查阅资料后知道了,应该使用已知的用户名和密码登陆 mysql -u root -p 然而密

一个超会写Bug的程序猿的博客 43万+

Python白色飘雪(完整代码)

Python绘制白色飘雪动画的完整代码。

AIGC 3万+

mina android 服务器,Mina实现Android和服务器的长链接及时通信

一、概述Mina官网:http://mina.apache.org/,这里面很多介绍我就不多说了,本文只是记录如何在后端通过srping boot +mina搭建后端服务,以及Android端如何与服务器简历链接的逻辑。二、服务器端实现服务器主要是使用spring boot实现的,通过config启动Mina,完整示例代码:https://github.com/stormdzh/MinaServe...

weixin_39766071的博客 279

IEC61850规约客户端软件开发实战(第二章)

本文介绍了基于IEC61850规约的客户端软件开发过程,重点阐述功能界面设计和服务端连接功能的实现。界面采用Qt框架设计,包含功能按钮区、数据模型展示区(使用QTreeWidget)和状态显示区。连接功能通过libiec61850开源库实现,详细说明了连接流程、句柄创建及状态管理的代码实现。测试结果表明系统能正确识别连接状态,并通过界面直观显示。文章为IEC61850规约软件开发提供了实用参考,下期将分享规约模型数据加载的实现过程。

半青年的博客 2858

一个Android的Tcp Socket连接库,更方便的完成你的长链接服务

在Android开发中,经常会需要由服务端主动推送一些消息给客户端,最常见的做法就是用Tcp Socket保持长链接。为了简化这个过程,做了一个简单的依赖库来实现TCP Socket的client功能。 Doc 引入依赖 Step 1.先配置你的project的build.gradle allprojects { repositories { ··· ...

大大大大大乔的博客 5147

全网首发--Unet3+改进16:在不同位置添加RepLKBlock超大卷积核

本文提出了一种基于大核卷积的神经网络架构RepLKNet,旨在缩小CNN与ViTs之间的性能差距。通过重新审视CNN中的大核设计,研究证明使用少量大卷积核替代多个小核能获得更强大的性能。提出的RepLKNet采用31×31大卷积核,在ImageNet和下游任务上取得了与SwinTransformer相当或更好的结果,同时具有更低延迟。文章详细介绍了实现步骤:(1)创建RepLKBlock模块文件;(2)在模型层中添加注意力机制;(3)在UNet模型中集成RepLKBlock;(4)完成训练流程。该方法展现了

AIcurator的博客 621

基于Simulink的电机轴电压与轴电流抑制仿真

本文带你完成了电机轴电压与轴电流抑制的Simulink仿真,实现了:✅ 揭示了共模电压 → 寄生电容 → 轴电压 → 轴承电蚀的完整链路✅ 搭建了含寄生参数的高频电机等效模型共模电压最小化PWM(源头抑制)dv/dt滤波器(路径阻断)轴接地(终端泄放) ✅ 通过仿真验证了轴电压从68 V降至<3 V的显著效果 ✅ 为高可靠性电机系统提供低成本、高效益的轴承保护方案。

amy_mhd的博客 163

Android 与服务器建立单向链接的SSE通讯机制

前段时间公司有个项目需求,需要与后台服务器保持一个单向的长链接,也就是说只需要服务器向客户端发送指令,客户端做出相应操作就可以了,并不需要客户端向服务端发送什么请求。网上找了很多资料,发现服务端用的SSE建立单向链接大多数是用到web端的,关于Android端的资料很少,经过一番探查,总算成功建立连接,以下代码为记录所用,觉得无用请划走即可。里面的baseUrl是自己的服务器地址,copy的时候自己添加就可以了,下面的监听会把你需要的数据传递出去。

weixin_72827485的博客 2935

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

android 建立Socket长链接 服务端 - 客户端代码

Socket通常也称做”套接字“,用于描述IP地址和端口,废话不多说,它就是网络通信过程中端点的抽象表示。值得一提的是,Java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。这是两个封装得非常好的类,使用起来很方便!     下面将首先创建一个SocketServer的类作为服务端如下,该服务端实现了多线程机制,可以在特定端口

u014702999的专栏 838

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

新浪短链接服务Android,新浪长链接转短连接API

/*** URL地址长短切换,由sina新浪短链接API生成* User: chenqt* Date: 2016/8/23* Time: 18:45*/class UrlSwitch{public function __construct(){//访问sina的key$this->sina_appkey = '1681459862';}private function curlQuery($...

weixin_32558567的博客 328

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

android 建立Socket长链接 服务端 - 客户端代码(+1)

什么是TCP/IP协议? 百度百科的解释:Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。

u014702999的专栏 795

netty4 Android和服务器进行通信

原本公司用的是极光推送消息。但是由于公司网络原因,或者说是极光推送的不及时性,BOSS说太慢,就让改成长链接了,花费了几天时间查资料,总算搞懂了一点皮毛,简单的通讯已经不是问题了。今天下午无事,写点内容巩固写记忆。我负责的Android这边。所以服务器的那边的不太会。netty的版本是netty-4.0.31.Final。。一。服务端代码这里是主要代码。NettyServerHandler()方法主

朱鹏鹏的专栏 3633

Android使用StompProtocolAndroid websocket长链接总结

这次长连接功能是借助: https://github.com/NaikSoftware/StompProtocolAndroid 下面附上我的代码 以及出现的问题: import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import andr...

shanshan_1117的博客 7208

Android推送中心跳和轮询的区别

Android推送服务有几种实现方式分别是轮询、SMS通知和长链接。主要记录下轮询和长链接的区别 轮询: 客户端通过Timer或AlarmManager定期询问服务器有没有新的消息, 这样服务器不用管客户端的地址是什么直接告诉它新消息即可. 这种方案最简单, 对于一些实时性要求不高的客户端来说比较适合,但对于即时通讯来说, 这种方案完全不能用. 对于即时通讯为了需要消息尽快达到客

zhaoxianwang的博客 932

STM32F4+WIFI模块TCP链接服务器,服务器与安卓客户端Websocket长链接;实现监控信息实时推送。

哈哈哈哈哈!这是笔者第一次写这种东西,项目是我们大二的一个大创组的项目:(虽然很没创新,导师也一棒子打死了)但是我们还是硬着头皮完成了。 1&gt;硬件端:stm32f429,红外线感应,esp8266模块,ov5640摄像头,步进电机,等等。 主要是采集移动物体的图像jpg,通过无线传输模块传递给服务器。这里将硬件当作tcp客户端。 2&gt;服务器端:java写的,Java建立...

lixinkailixinkai的博客 3619

Android短链接方式实现消息推送

最近学习了Android的消息推送。一开始一直以为很复杂,没想到消息推送也分为两种方式一种是长链接,比如现在的即时通讯,基于XMPP、MQTT协议的消息推送。一种是短链接方式,实现的原理是android开机启动服务,定时调戏(就是访问的意思)服务器,服务器json形式返回数据,客户端再解析数据,把内容显示在通知栏栏,点击通知栏跳到指定的html页面上。上面总结下来就是短链接的Android端消息推

hong15007046964的专栏 1135

TCP长连接+心跳包

import android.os.Bundle; import android.text.TextUtils; import android.text.method.ScrollingMovementMethod; import android.util.Log; import com.ysl.socket.broad.SockeBroadcastReceiver; import com.y...

八戒卖萌的博客 514
上一篇: joomla组件开发——会员积分管理组件的登陆跳转
下一篇: joomla组建汉化
明象Dean
博客等级 码龄18年 32粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值