評論或文章裡添加@使用者名稱,被@使用者可以收到通知的功能怎麼實現?
來源:互聯網
上載者:User
評論或文章裡添加@使用者名稱,該使用者名稱自動加上一個使用者首頁地址的標籤,同時被@使用者可以收到通知,請問這個功能怎麼實現呢?
回複內容:
每一條評論和文章發完之後 會對@後面的內容匹配分組,比如到一個分隔字元一類的規則,然後非同步壓入一個訊息佇列。
這個隊列處理是否有存在使用者,對存在的使用者做訊息廣播。
後端邏輯大概這樣子吧。編輯一類不會有處理,只在insert這一步做。
這裡可以抽象出來一個尋找at使用者的介面,可以抽象出一個檢測at後面是否使用者合法的介面。
前端我也做過,web的話,直接對富文本裡的change做變化,發現一個at之後,操作range選擇最近的一個到at或者分隔字元的字元再去請求這個字元key列出目前使用者的好友或者全站的使用者like的提示,展現上就是個浮層加游標位置的定位計算。滑鼠選擇後 可能會對文本打標記。
這一步主要是增加後端匹配速度,發現標記就不用再對文本做正則了。可以把標記的通知使用者在前端就解析出來發給後端了。
這裡可能每個人實現邏輯都不一樣。大概的步驟應該就是以上。來來來,我們一起研究一下知乎是怎麼做的。
首先明白一點,在答案中at某人的時候,顯示的是暱稱,而暱稱在知乎裡是可以重複的,那麼,很明顯,是不能直接根據這個暱稱來判斷at的是哪個人的。
我們可以試著在答案裡@某個人 ,首先我們能看到,@後面的使用者名稱部分字型顏色變了,和前後的文字樣式是不一樣的,說明at部分應該是用某個標籤包圍起來的,F12開啟瀏覽器調試功能,定位到答案中@部分的html代碼,如:
可見,知乎用一個a標籤把@和使用者名稱包圍了起來,注意紅色圈起來的data-hash的屬性和class=“member_mention”,class屬性可以改變樣式也可以表示這裡at了某個人,而data-hash屬性很
可能就是用於識別被at使用者的
唯一識別碼,而這樣答案提交之後,知乎伺服器就可以根據這個member_mention和hash這兩個關鍵屬性準確快速識別出您at的使用者了(當然,我不是知乎員工, 這隻是個人猜測,不一定是知乎的真正實現方式,但是這種方式是可行的),然後就可以給相應的使用者發送通知了,識別出使用者之後,至於顯示使用者名稱片的功能,只是給簡單的js和css問題而已。百度貼吧就是直接@某人 然後解析的。
知乎這種是輸入@ 之後選一個人,是確定的,不需要再去解析。直接把這個人的id提交給後台。
可能這個跟百度貼吧id唯一,知乎暱稱不唯一也有一定關係。在應用程式層專門加一個解析邏輯,從使用者提交的內容裡抓出at就行,考慮到知乎的編輯器還可以即時顯示,說明後台有個api把這個功能暴露出來了。解析出@後面的第一個合法使用者名稱,然後想怎麼發通知都可以。。。
也可以像知乎這樣,隨著你打字即時提示讓你選取正則匹配後看使用者名稱存在否
Discuz有這方面的源碼看情況。
如果內容不可再編輯,怎麼實現都行。
如果可以,那麼你的業務需求提得並不足夠明確。