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

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

  •  
  •   superheros Sep 7, 2020 5505 views
    This topic created in 2073 days ago, the information mentioned may be changed or developed.

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

    30 replies    2020-10-06 20:21:00 +08:00
    RedBeanIce
        1
    RedBeanIce  
       Sep 7, 2020
    。。。前端调接口啊。。。。

    @xxx 那么在提交回复请求的时候,告诉这个人,这个文章里面有人 @你
    至于前端展示的时候,,这个就是前端你的锅了,。。后台表示无所谓,就是个接口的事情。
    taogen
        2
    taogen  
       Sep 7, 2020
    未读消息存数据库
    cmqwan
        3
    cmqwan  
       Sep 7, 2020
    cmqwan
        4
    cmqwan  
       Sep 7, 2020
    AlbertChen
        5
    AlbertChen  
       Sep 7, 2020
    提交请求的时候后端解析文本里 @ 和空格之间的字符串, 发给对应的人啊
    superheros
        6
    superheros  
    OP
       Sep 7, 2020
    我在想 如果用户拷过来一段文字 直接提交了 里面有 @RedBeanIce 该怎么处理
    td width="48" valign="top" align="center">superheros
        7
    superheros  
    OP
       Sep 7, 2020
    我试了 V2EX 是会处理自己加个空格的 我考过来是没有空格的 不知道怎么处理的 在 @用户后面自己加了个空格,怎么正确区分 @后面的用户
    superheros
        8
    superheros  
    OP
       Sep 7, 2020
    superheros
        9
    superheros  
    OP
       Sep 7, 2020
    RedBeanIce 这个昵称后面跟中文,是会自动加空格的 AlbertChen 这个昵称后面加英文就区分不了了 ,不会自己加空格,大概明白了
    cassyfar
        10
    cassyfar  
       Sep 7, 2020
    那个空格是为了中文美化的。
    cassyfar
        11
    cassyfar  
       Sep 7, 2020
    我比较好奇 @完之后出来的下拉菜单,这些用户名是从后端实时取的吗?
    iConnect
        12
    iConnect  
       Sep 7, 2020 via Android
    不要学微博的 @用户做法,这个功能有 bug 微博一直不改。 @张三 之后,张三改昵称了,然后另外一个人又用了张三这个昵称,历史记录 @张三就全部是老张三。
    superheros
        13
    superheros  
    OP
       Sep 7, 2020
    @cassyfar 是的
    iConnect
        14
    iConnect  
       Sep 7, 2020 via Android
    推特的做法值得借鉴,是 @用户 ID,而不是昵称。
    superheros
        15
    superheros  
    OP
       Sep 7, 2020
    @iConnect 谢谢提醒,我正准备用 @用户昵称
    lshero
        16
    lshero  
       Sep 7, 2020   1
    客户端提交给服务端的是 [@张三|123456] 这种形式 客户端自己渲染成 @张三 服务端根据后面你的 UID 给用户发 push 并且保存到数据库。
    superheros
        17
    superheros  
    OP
       Sep 7, 2020
    @lshero 明白了 谢谢
    iConnect
        18
    iConnect  
       Sep 7, 2020 via Android
    @lshero 你的这个方案如果考虑到允许用户修改用户 ID/用户名,以及允许用户编辑内容(微博允许编辑,推特不允许),实现的方案又大相径庭了。
    no1xsyzy
        19
    no1xsyzy  
       Sep 7, 2020   9
    @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
        20
    ylsc633  
       Sep 7, 2020
    目前我想到的做法有:
    1. 解析 @ 符号 和后面第一个空格之间的 名称,然后与用户进行匹配! 匹配成功后给相关用户产生一条未读消息列表
    2. 前端处理 @ 然后存到本地,然后在提交创建得时候,用另外一个参数带上本次回复内容+艾特用户等信息 后端处理一致
    KevinBlandy
        21
    KevinBlandy  
       Sep 7, 2020
    用正则解析,获得解析到的数据,然后拼接 a 标签,发送提醒。
    你可以看看这个
    [https://springboot.io/t/topic/684]( https://springboot.io/t/topic/684)
    gz911122
        22
    gz911122  
       Sep 7, 2020
    @no1xsyzy 学到了 666
    victor
        23
    victor  
       Sep 7, 2020
    Java 怎么实现先不说,推荐一波前同事的 https://github.com/ichord/At.js
    autoxbc
        24
    autoxbc  
       Sep 7, 2020
    @cassyfar #11 前端实现的,页面源码里有本页全部用户名数组
    CoderGeek
        25
    CoderGeek  
       Sep 8, 2020
    几年前的方式 自定义标签内容 uid 昵称
    jiangheng1990
        26
    jiangheng1990  
       Sep 8, 2020
    @cassyfar 直接取一次缓存就行了
    lonelymarried
        27
    lonelymarried  
       Sep 8, 2020
    @lshero 这个方法简单明了
    thinkmore
        28
    thinkmore  
       Sep 8, 2020
    如果是后端的话,比如 @thinkmore 你解析的时候发现 @了某个人,就在某张表生成一条消息,然后定时从某张表取就行了
    zsdroid
        29
    zsdroid  
       Sep 9, 2020
    \s*@[a-zA-Z]+\s+
    ZSpirytus
        30
    ZSpirytus  
       Oct 6, 2020 via Android
    我做 im 的时候,一般都是消息体内有一个扩展字段 Map<String, Any>,消息发出去前检查一下有没有 at 谁。
    好处就是方便,不需要跟服务端对协议。
    坏处就是拓展字段一多,浪费带宽。
    About     Help     Advertise     Blog     API     FAQ     Solana     3072 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 64ms UTC 15:05 PVG 23:05 LAX 08:05 JFK 11:05
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86