大佬们, 发帖 @人就通知相关被 @的人员, Java 怎么实现

2020-09-07 18:39:59 +08:00
 superheros

最近需要做一个社区类的产品,类似于微博那种,在文章里 @某个用户,然后通知到相关用户有人 @你是怎么实现的,目前还没有好的想法,

4599 次点击
所在节点    Java
30 条回复
RedBeanIce
2020-09-07 18:45:14 +08:00
。。。前端调接口啊。。。。

@xxx 那么在提交回复请求的时候,告诉这个人,这个文章里面有人 @你
至于前端展示的时候,,这个就是前端你的锅了,。。后台表示无所谓,就是个接口的事情。
taogen
2020-09-07 18:45:36 +08:00
未读消息存数据库
cmqwan
2020-09-07 19:01:37 +08:00
cmqwan
2020-09-07 19:02:42 +08:00
AlbertChen
2020-09-07 19:08:22 +08:00
提交请求的时候后端解析文本里 @ 和空格之间的字符串, 发给对应的人啊
superheros
2020-09-07 19:10:48 +08:00
我在想 如果用户拷过来一段文字 直接提交了 里面有 @RedBeanIce 该怎么处理
superheros
2020-09-07 19:13:46 +08:00
我试了 V2EX 是会处理自己加个空格的 我考过来是没有空格的 不知道怎么处理的 在 @用户后面自己加了个空格,怎么正确区分 @后面的用户
superheros
2020-09-07 19:15:35 +08:00
superheros
2020-09-07 19:17:24 +08:00
RedBeanIce 这个昵称后面跟中文,是会自动加空格的 AlbertChen 这个昵称后面加英文就区分不了了 ,不会自己加空格,大概明白了
cassyfar
2020-09-07 19:20:37 +08:00
那个空格是为了中文美化的。
cassyfar
2020-09-07 19:22:57 +08:00
我比较好奇 @完之后出来的下拉菜单,这些用户名是从后端实时取的吗?
iConnect
2020-09-07 19:24:28 +08:00
不要学微博的 @用户做法,这个功能有 bug 微博一直不改。 @张三 之后,张三改昵称了,然后另外一个人又用了张三这个昵称,历史记录 @张三就全部是老张三。
superheros
2020-09-07 19:24:29 +08:00
@cassyfar 是的
iConnect
2020-09-07 19:25:30 +08:00
推特的做法值得借鉴,是 @用户 ID,而不是昵称。
superheros
2020-09-07 19:30:10 +08:00
@iConnect 谢谢提醒,我正准备用 @用户昵称
lshero
2020-09-07 19:30:11 +08:00
客户端提交给服务端的是 [@张三|123456] 这种形式 客户端自己渲染成 @张三 服务端根据后面你的 UID 给用户发 push 并且保存到数据库。
superheros
2020-09-07 19:35:49 +08:00
@lshero 明白了 谢谢
iConnect
2020-09-07 21:02:25 +08:00
@lshero 你的这个方案如果考虑到允许用户修改用户 ID/用户名,以及允许用户编辑内容(微博允许编辑,推特不允许),实现的方案又大相径庭了。
no1xsyzy
2020-09-07 21:37:41 +08:00
@iConnect 你仍然说错了 Twitter 的情况,因为 Twitter 那个 @ 后面的名字也是可以改的
参见: https://help.twitter.com/en/managing-your-account/change-twitter-handle

实际上,Twitter 的做法比较复杂,并不是以文本方式存储的,而是以结构化存储的。
打个比方,比如本条回复,Twitter 会带上一段 metadata,表示从第一 (1) 个字符到第九 (9) 个字符是一个 user_mention,被 @ 到的这个人屏幕名称(即 @ 后面的 id )是 “iConnect”,全名是 “XXX”,数字编号是 “220171”(其中数字编号是不会改变的,显示一般是)
比如随便截了一个 API 的结果:


好处是不用每个平台重新 parse 一遍(可能 parse 的结果还会微妙地不一样?),直接取子串渲染就行。
ylsc633
2020-09-07 21:44:43 +08:00
目前我想到的做法有:
1. 解析 @ 符号 和后面第一个空格之间的 名称,然后与用户进行匹配! 匹配成功后给相关用户产生一条未读消息列表
2. 前端处理 @ 然后存到本地,然后在提交创建得时候,用另外一个参数带上本次回复内容+艾特用户等信息 后端处理一致

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/704946

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX