評論或文章里添加@用戶名,被@用戶可以收到通知的功能怎麼實現?
02-03
評論或文章里添加@用戶名,該用戶名自動加上一個用戶主頁地址的標籤,同時被@用戶可以收到通知,請問這個功能怎麼實現呢?
每一條評論和文章發完之後 會對@後面的內容匹配分組,比如到一個分隔符一類的規則,然後非同步壓入一個消息隊列。
這個隊列處理是否有存在用戶,對存在的用戶做消息廣播。
後端邏輯大概這樣子吧。編輯一類不會有處理,只在insert這一步做。
這裡可以抽象出來一個查找at用戶的介面,可以抽象出一個檢測at後面是否用戶合法的介面。
前端我也做過,web的話,直接對富文本里的change做變化,發現一個at之後,操作range選擇最近的一個到at或者分隔符的字元再去請求這個字元key列出當前用戶的好友或者全站的用戶like的提示,展現上就是個浮層加游標位置的定位計算。滑鼠選擇後 可能會對文本打標記。
這一步主要是增加後端匹配速度,發現標記就不用再對文本做正則了。可以把標記的通知用戶在前端就解析出來發給後端了。
這裡可能每個人實現邏輯都不一樣。大概的步驟應該就是以上。
來來來,我們一起研究一下知乎是怎麼做的。首先明白一點,在答案中at某人的時候,顯示的是昵稱,而昵稱在知乎里是可以重複的,那麼,很明顯,是不能直接根據這個昵稱來判斷at的是哪個人的。我們可以試著在答案里@某個人 ,首先我們能看到,@後面的用戶名部分字體顏色變了,和前後的文字樣式是不一樣的,說明at部分應該是用某個標籤包圍起來的,F12打開瀏覽器調試功能,定位到答案中@部分的html代碼,如下圖:
解析出@後面的第一個合法用戶名,然後想怎麼發通知都可以。。。也可以像知乎這樣,隨著你打字實時提示讓你選取
百度貼吧就是直接@某人 然後解析的。
知乎這種是輸入@ 之後選一個人,是確定的,不需要再去解析。直接把這個人的id提交給後台。
可能這個跟百度貼吧id唯一,知乎昵稱不唯一也有一定關係。在應用層專門加一個解析邏輯,從用戶提交的內容里抓出at就行,考慮到知乎的編輯器還可以實時顯示,說明後台有個api把這個功能暴露出來了。
看情況。
如果內容不可再編輯,怎麼實現都行。
如果可以,那麼你的業務需求提得並不足夠明確。正則匹配後看用戶名存在否Discuz有這方面的源碼
推薦閱讀: