java - 即时通信系统和push推送系统都是怎么实现的啊?
问题描述
一条消息 如何通过服务器中转达到 指定的另一端的
方便的话 贴一段典型的代码
另外session存储的时候 都存储什么信息啊
问题解答
回答1:我的理解:客户端每间隔一段时间(比如一秒)向服务器进行一次请求(发送request)。如果服务端存在消息则在响应(response)中标记信息,通知客户端服务器端存在新消息。客户端向服务端发送请求拉去消息,服务端响应。
request:有新消息吗?收到请回答。response:没有。request:有新消息吗?收到请回答。response:没有。request:有新消息吗?收到请回答。response:有,消息id是123456。request:请发送消息id是123456的消息内容。response:消息id:123456,消息正文:惊!这个女人竟然在13亿人面前做这种事……。
回答2:消息传达是通过客户端刷新向服务端获得消息的而不是服务端直接向客户端发送
以前确实有一些是直接在本地开端口由服务器直接请求客户端的,但现在用于消息推送已经不多见了(通常用于局域网内传输文件或信息)
session存储在服务器,本地通过 Cookies 存储 SESSION 的 name 和 id,服务器通过这两个而获取服务器端存储的内容
回答3:目前常见的是两种方案。1、客户端主动轮询(也就是每隔N时间向服务端询问有没有消息。2、服务端主动推送。后端服务之间用socket,与前端通讯的话可以用websocket。
回答4:http2.0 可以很好的处理,可以尝试一下啊~
回答5:都说是即时性的了,肯定要建立长连接这种了。比如socket。
回答6:如果只是属于产品的众多功能之一,即时通信推荐题主对接IM,既可以节约一大笔开发支出,现有的IM提供商附带的功能又比较全面,比自己开发要划算的多,题主可以看一下环信 http://www.easemob.com/
相关文章:
1. javascript - node.js promise没用2. node.js - nodejs如何发送请求excel文件并下载3. docker-machine添加一个已有的docker主机问题4. golang - 用IDE看docker源码时的小问题5. docker - 各位电脑上有多少个容器啊?容器一多,自己都搞混了,咋办呢?6. angular.js - 为什么给 Angular 指令绑定事件无法生效7. 为什么我ping不通我的docker容器呢???8. java - 我在用Struts2上传文件时,报以下错误怎么回事?9. android 如何实现如图中的键盘上的公式及edittext的内容展示呢10. MySQL如何实现表中再嵌套一个表?
