‘壹’ 移动端消息推送前端怎么实现
移动端消息推送前端有两种方式:1、轮询方式(PULL)
就是主动去拉取消息,客户端和服务器定期的建立连接,通过消息队列等方式来获取是否有新的消息。费流量、耗电量有着很明显的劣势,而且APP关闭后就没有办法获取消息了,对用户体验有较大伤害。
2、长连接方式(PUSH)
这一种就是我们经常说的推送,它是基于TCP长连接实现,客户端和服务器建立TCP长连接之后,客户端定期向服务器发送心跳包用于保持连接,有消息的时候,服务器直接通过这个已经建立好的TCP连接通知客户端。随着客户端数量和消息并发量的上升,对于消息服务器的性能和稳定性要求提出了非常大的考验。
因此,就难度而言,此方式代价也最高。因此国内涌现出了大量的第三方推送服务提供商。目前应用最为广泛的第三方推送服务提供商包括极光等第三方服务,绝大部分APP都会优先考虑采用第三方推送服务。
因此,实现移动端消息推送可以使用极光,极光是中国领先的开发者服务提供商,专注于为开发者提供稳定高效的消息推送、一键认证以及流量变现等服务,助力开发者的运营、增长与变现。同时,极光的行业应用已经拓展至市场洞察、金融风控与商业地理服务,助力各行各业优化决策、提升效率。
‘贰’ WebSocket Session共享
最近在做消息中心模块,想要实现消息实时推送到前端页面展示,直接摒弃了前端定时轮训调用接口来获取消息数据的方式,采用了WebSocket服务端推送。
流程是首先前端跟后端应用新建一个连接,并携带当前登录的用户ID,此时WebSocket会创建一个WebsocketSession来唯一绑定该连接,我们会在后端用Map建立用户ID与Session的映射关系:
后续有新消息到达时,就可以通过该Map映射找到指定用户ID对应的session来推送消息。但有一个问题,后端是多应用节点,每个节点维护一个这样的Map, 无法共享WebsocketSession ,而且 redis也无法对WebsocketSession序列化后进行存储 。
由于项目目前用到了Redis,所以可以 采用Redis的发布/订阅功能来实现WebsocketSession共享问题。
1.新建一个对象,属性有userId, message,用于发送消息
2. 当新消息到达时,将消息注册到redis指定topic的频道上
3.每个应用节点都订阅该topic的频道,这样新消息一注册,每个节点都能接收到Object,然后从Object中获取userId,再从映射Map中获取userId对应的WebsocketSession(在哪个节点建立的连接和Map映射关系,就会在哪个节点找到对应的session),进行消息推送。
就这样通过Redis的发布/订阅功能实现session共享。当然在步骤2,新消息到达时,可以先在本节点的Map映射中查找是否有userId对应的session,如果有,直接推送消息,而且不必要再将消息注册到redis中。
‘叁’ 前端技术 问怎么做到不刷新,实时获取这个消息
一般有三种方式:
轮询,也就是页面定时向服务器拉取消息,有未读消息则更新
长连接,页面和服务器建立一个持序的TCP连接,当没有新消息时,服务器阻塞此连接;当新消息到来时,服务器将响应返回到页面并关闭此连接。前端将返回的响应更新到页面上,并马上向服务器再发起一个新的长连接
websocket,前端和服务器建立一个websocket连接,由服务器主动向前端推送消息,前端每次收到来自服务器的消息时将内容更新到页面上。
‘肆’ html5消息推送功能怎么做
前台可以设置一个setinterval,定期发送ajax监听后台,也可以用HTML5的websocket,html5的方式比较新,消息比较短,适合做聊天系统。在WebSocket API中,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。
webSocket是html5新引入的技术,允许后台随时向前端发送文本或者二进制消息,WebSocket是一种全新的协议,不属于http无状态协议,协议名为“ws”,这意味着一个websocket连接地址会是这样的写法
WebSocket是为解决客户端与服务端实时通信而产生的技术。其本质是先通过HTTP/HTTPS协议进行握手后创建一个用于交换数据的TCP连接,此后服务端与客户端通过此TCP连接进行实时通信。
消息推送选择极光。JPush 是经过考验的大规模 App 推送平台,每天推送消息量级为数百亿条。 开发者集成 SDK 后,可以通过调用 API 推送消息。同时,JPush 提供可视化的 web 端控制台发送通知,统计分析推送效果。 JPush 全面支持 Android, iOS, Winphone 三大手机平台。
‘伍’ 前端 消息推送是怎么实现的
主要介绍其中的五种实现方式:短轮询、Comet、Flash XMLSocket、Server-sent、WebSocket1、短轮询
指在特定的的时间间隔(如每10秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客户端的浏览器。浏览器做处理后进行显示。无论后端此时是否有新的消息产生,都会进行响应
2、Comet
包括了长轮询和长连接,长轮询是客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求;长连接是在页面中的iframe发送请求到服务端,服务端hold住请求并不断将需要返回前端的数据封装成调用javascript函数的形式响应到前端,前端不断收到响应并处理
3、Flash XMLSocket
在 HTML 页面中内嵌入一个使用了 XMLSocket 类的 Flash 程序。JavaScript 通过调用此 Flash 程序提供的socket接口与服务器端的socket进行通信。JavaScript 在收到服务器端以 XML 格式传送的信息后可以很容易地控制 HTML 页面的内容显示
4、Server-sent
服务器推指的是HTML5规范中提供的服务端事件EventSource,浏览器在实现了该规范的前提下创建一个EventSource连接后,便可收到服务端的发送的消息,实现一个单向通信。客户端进行监听,并对响应的信息处理显示
5、WebSocket
WebSocket是HTML5下一种新的协议,是基于TCP的应用层协议,只需要一次连接,便可以实现全双工通信,客户端和服务端可以相互主动发送消息。客户端进行监听,并对响应的消息处理显示
针对自己系统的应用场景选择合适的推送方案才是合理的,因此最后简单说一下实现个性化推送的两种方式。第一种很简单,直接使用第三方实现的推送,无需复杂的开发运维,直接可以使用。第二种就是自己封装,可以选择如今较为火热的WebSocket来实现系统的推送。
关于第三方推送平台,极光推送,操作简单,稳定性高,送达率快
‘陆’ 前端消息推送怎么实现
前端消息推送主要有两种方式:1、轮询方式(PULL):主动去拉取消息,客户端和服务器定期的建立连接,通过消息队列等方式来获取是否有新的消息。
2、长连接方式(PUSH):它是基于TCP长连接实现,客户端和服务器建立TCP长连接之后,客户端定期向服务器发送心跳包用于保持连接,有消息的时候,服务器直接通过这个已经建立好的TCP连接通知客户端。
目前应用最为广泛的第三方推送服务提供商包括极光等第三方服务,绝大部分APP都会优先考虑采用第三方推送服务。
实现前端端消息推送可以选择极光,极光是中国领先的开发者服务提供商,专注于为开发者提供稳定高效的消息推送、一键认证以及流量变现等服务,助力开发者的运营、增长与变现。同时,极光的行业应用已经拓展至市场洞察、金融风控与商业地理服务,助力各行各业优化决策、提升效率。
‘柒’ Java Web 服务器的消息推送 几种方案
Java Web 服务器的消息推送有以下几种方案:1. 轮询:前端使用ajax不停的发起请求获取想要的数据(最简单也是最容易耗尽服务器资源)。
2. 长连接:HTTP长连接,客户端向服务端发起请求,服务端等有数据了才response,否则一直持有该连接Cometgithub: comet4j 项目,可以直接下载配置jar到tomcat下使用。
3、使用xmpp协议的一种技术,能够做到js中调用服务器的Java方法。
消息推送建议用专业的推送平台,例如:极光。深圳市和讯华谷信息技术有限公司创立于2011年,其团队核心成员来自腾讯、摩根士丹利、豆瓣、Teradata和中国移动等公司。公司总部位于深圳,在北京、上海、广州、成都均设有办公室。