首页 新闻 会员 周边 捐助

利用websocket(或者其他的方式) 在网站里的私信消息怎么实现提醒功能(例如博客园右上角的短消息条数)

0
悬赏园豆:15 [待解决问题]

在网上看了好多  大多是关于轮询的  但是总感觉太消耗资源  本人学习中 很多不懂  如果利用websocket  怎么快速的写出(java实现)这个消息提醒功能  网上很多是实施聊天的(不需要这个)  希望有大神给点思路 

Nomadewey的主页 Nomadewey | 初学一级 | 园豆:166
提问于:2017-08-01 11:06
< >
分享
所有回答(7)
0

根据个人id,在数据库查询消息条数,如果有0条,则什么都不显示,如果大于0条则显示,你有{0}条未读信息

没什么比你更优秀 | 园豆:130 (初学一级) | 2017-08-01 11:14

这个查表实现思路我知道 我现在问的是怎么让消息实时提醒

支持(0) 反对(0) Nomadewey | 园豆:166 (初学一级) | 2017-08-01 11:16

@DeweyLiu: http://www.cnblogs.com/best/archive/2016/09/12/5695570.html

支持(0) 反对(0) 没什么比你更优秀 | 园豆:130 (初学一级) | 2017-08-01 11:22
0

之前做过一个是通过socket通信实现的。 a 给服务器发消息, 服务器收到消息后返回一个值给a

青语 | 园豆:1000 (小虾三级) | 2017-08-01 11:23

有源码吗  可否参考一下

支持(0) 反对(0) Nomadewey | 园豆:166 (初学一级) | 2017-08-01 13:56

@DeweyLiu: 不是java写的

支持(0) 反对(0) 青语 | 园豆:1000 (小虾三级) | 2017-08-01 14:47
0

用一个专门的表记录消息信息, 信息包括: uid,消息状态 等,

展示个人消息的时候,关联uid查询就可以了,

苍枫露雨 | 园豆:1027 (小虾三级) | 2017-08-01 14:49

我问的不是数据库的逻辑实现  是前台与服务器实时交互的问题

支持(0) 反对(0) Nomadewey | 园豆:166 (初学一级) | 2017-08-01 14:51

@DeweyLiu: 

如果只是为了私信消息提醒,我觉得定时请求获取信息就够了,很多网站都是怎么做的,就看博客园,你查看xhr,会发现有很多的 “https://q.cnblogs.com/common/GetUnReadMsgCount”请求,就是请求未读消息条数;

 

如果你的需求是对实时性要求非常高,类似于webqq这种网页聊天的,你可以参看:https://segmentfault.com/q/1010000002425027,

其中提出了多种解决方案,

支持(0) 反对(0) 苍枫露雨 | 园豆:1027 (小虾三级) | 2017-08-01 15:03

@苍枫露雨: 那这种定时请求 用的是什么技术?

支持(0) 反对(0) Nomadewey | 园豆:166 (初学一级) | 2017-08-01 15:54

@DeweyLiu: 

ajax, 通过js的  setinterval  函数定时调用

支持(0) 反对(0) 苍枫露雨 | 园豆:1027 (小虾三级) | 2017-08-02 09:54
0

 这个提醒功能可以利用websocket 配合EventSource来使用,目前H5中支持利用websocket和服务端进行实时通信,java代码不是很熟悉,但是基本思路都是一样的,请参考这篇文章http://javascript.ruanyifeng.com/htmlapi/eventsource.html

Arthur1024 | 园豆:91 (初学一级) | 2017-08-01 23:06
0

当出现了websocket之后,类似于长轮询和持久链接都已经不再推荐使用了。websocket作用是什么,就是在服务器与客户端之间建立一个链接,当服务器端产生消息时,主动的通过链接发送给前端,链接一直存在,直到socket链接关闭,这样就不需要之前的,前端去请求,服务端没有信息,再请求,又没有,浪费资源。而是有消息的时候推过来。那么前端使用socket可以去看一下api,按照要求创建一个socket链接,需要注意的只有一点,那就是在何时关闭链接,而不要让连接一直存在就可以了。望采纳。

铁柱成针 | 园豆:614 (小虾三级) | 2017-08-02 15:01
0

每个socket连接到服务器后,进行用户和连接之间的Map;

比如现在来消息了,发给B,服务端通过查找到用户B Map 的 连接,连接写入消息。

花飘水流兮 | 园豆:13615 (专家六级) | 2017-08-02 22:10
0

看你需求了,如果是像discuz、oschina之类,都是在页面刷新的时候才获取一次。

如果需要事实/准实时提醒,那么可以用一个websocket

其实ajax轮询经过优化,资源消耗不会像你想的那么多。

依然菜刀 | 园豆:254 (菜鸟二级) | 2017-11-13 17:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册