消息推送是如何实现的

消息推送是如何实现的,第1张

消息推送(Push)就是通过服务器把内容主动发送到客户端的过程。运营人员通过自己的产品或第三方工具对用户移动设备进行主动消息推送。完成推送后,消息通知会展示在移动设备的锁定屏幕及通知栏上,用户点击通知即可去往相应页面。

现在流行的消息推送实现方式,主要为长链接方式实现。其原理是客户端主动和服务器建立TCP长链接,长链接建立之后,客户端定期向服务器发送心跳包用于保持链接,当有消息要发送的时候,服务器可以直接通过这个已经建立好的长链接,将消息发送到客户端。

个推作为国内移动推送领域的早期进入者,于2010年推出个推消息推送SDK产品,十余年来持续为移动开发者提供稳定、高效、智能的消息推送服务,成功服务了人民日报、新华社、CCTV、新浪微博等在内的数十万APP客户。个推消息推送,也是运用的长链接方式实现消息推送的,其长链接稳定性高、存活好,消息送达率高。开发者通过集成个推消息推送SDK,即可简单、快捷地实现Android和iOS平台的消息推送功能,有效提高产品活跃度、增加用户留存。

如果您对个推消息推送感兴趣,欢迎点击前往了解详情。

个推消息推送工作原理

java socket客户端向服务器端发送消息,可以使用socket类,实例如下:mport java.*public class EchoClient { public static void main(String args[]) { try { Socket connection =new Socket("127.0.0.1", 5050) BufferedReader input = new BufferedReader(new InputStreamReader(connection.getInputStream())) PrintWriter out = new PrintWriter(connection.getOutputStream(),true ) String info info = input.readLine() System.out.println(info) boolean done = false BufferedReader in = new BufferedReader(new InputStreamReader(System.in)) String sInput //out.println("BYE") while (!done) { info = input.readLine() System.out.println(info) } connection.close() } catch (SecurityException e) { System.out.println("SecurityException when connecting Server!") } catch (IOException e) { System.out.println("IOException when connecting Server!") } }}

通过Cocoa Pods添加MQTTKit

MQTTKit在github上链接https://github.com/NormanLeeIOS/MQTTKit#send-a-message,down下来。

cd到工程目录,输入pod install,用xcode打开工程的打开xcworkspace扩展名的文件。

如果不是MQTTKit存在更新的版本,则输入pod update。

新建一个MQTT的服务请求

NSString *clientID = ...

MQTTClient *client = [[MQTTClient alloc] initWithClientId:clientID]

发送消息,每次发送消息包括目标host和本地MQTT消息.具体MQTT格式消息见代码。这里Host可以是Server的IP,不需要host表解析。

// connect to the MQTT server

[self.client connectToHost:@"iot.eclipse.org"

completionHandler:^(NSUInteger code) {

if (code == ConnectionAccepted) {

// when the client is connected, send a MQTT message

[self.client publishString:@"Hello, MQTT"

toTopic:@"/MQTTKit/example"

withQos:AtMostOnce

retain:NO

completionHandler:^(int mid) {

NSLog(@"message has been delivered")

}]

}

}]

订阅主题并接受MQTT格式的消息,这部分在viewdidload中实现。

// define the handler that will be called when MQTT messages are received by the client

[self.client setMessageHandler:^(MQTTMessage *message) {

NSString *text = [message.payloadString]

NSLog(@"received message %@", text)

}]

// connect the MQTT client

[self.client connectToHost:@"iot.eclipse.org"

completionHandler:^(MQTTConnectionReturnCode code) {

if (code == ConnectionAccepted) {

// when the client is connected, subscribe to the topic to receive message.

[self.client subscribe:@"/MQTTKit/example"

withCompletionHandler:nil]

}

}]

断开连接

[self.client disconnectWithCompletionHandler:^(NSUInteger code) {

// The client is disconnected when this completion handler is called

NSLog(@"MQTT client is disconnected")

}]

整个连接建立、发送消息、接受消息、断开连接都是通过Block的消息机制来实现,因此需要对block有很好地理解。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/564549.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-07-02
下一篇2023-07-02

发表评论

登录后才能评论

评论列表(0条)

    保存