精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何實現多人協作的在線文檔

網絡
由于業務需要,在工作中接觸到了在線文檔、在線Excel。但是在調研階段發現國內相關文章比較匱乏,所以結合工作實踐和自己的一些思考,寫幾篇文章剖析實現在線文檔和在線Excel的一些技術方案。

由于業務需要,在工作中接觸到了在線文檔、在線Excel。但是在調研階段發現國內相關文章比較匱乏,所以結合工作實踐和自己的一些思考,寫幾篇文章剖析實現在線文檔和在線Excel的一些技術方案。為了避免涉及到公司隱私,所以文章中一些數據結構的設計和非關鍵場景都寫的比較簡略。我們主要從需求分析、方案設計、技術選型等幾個方面介紹如何實現多人協作的在線文檔。

需求分析

我們借鑒領域驅動模型的思路進行需求分析。需求中包含「人」「文檔」兩個實體。「人」的主要屬性有:用戶ID、用戶名。「文檔」的主要屬性有:文檔ID、文檔內容、創建者、創建時間。人和文檔的關系非常簡單:一個人可以有多個文檔,一個文檔只歸屬某一個人,屬于一對多的關系。

因為文檔內容不能被隨便閱讀和修改,所以還要有權限管理,「權限」是一種值對象。權限的值有:閱讀、編輯。人對文檔可以有閱讀權限或編輯權限。

還有一個最關鍵的問題就是「協作」。協作是多個「人」,對一篇文檔同時操作。協作的過程中需要把多個人編輯的內容,經過合并轉換為最終保存的文檔內容。協作的過程中需要讓文檔編輯人員看到當前「一起協作的對象」和協作對象「實時編輯的內容」

為了實現以上功能我們把系統拆分成五大模塊:人員管理、文檔管理、權限管理、協作和前端文檔編輯器。

方案設計

人員管理

因為人員管理不是本文的重點,所以我們只做一個簡要的設計,主要是為了輔助說明后面的設計。

表結構主要字段有:

下面介紹下該模塊的主要邏輯。

用戶注冊

  1. 前端把用戶填寫的用戶名、密碼、手機號等信息加密后發送給服務端。
  2. 服務端拿到數據,再和生成的唯一用戶ID一起,存入表中。

用戶登錄

  1. 前端要求用戶輸入用戶名+密碼并發送給服務端,服務端校驗用戶名和密碼的正確性。
  2. 校驗通過后,根據「用戶名+密碼+密鑰+時間戳」生成有時效性的Token,返回給客戶端。
  3. 登錄之后前端所有請求都帶著Token信息。服務端根據Token獲取當前登錄用戶信息并判斷請求是否合法。

文檔管理

文檔的表結構設計:

下面介紹下該模塊的主要邏輯。

創建文檔

  1. 前端發送文檔名稱、文檔內容給服務端
  2. 服務端生成唯一的文檔ID,從Token中獲取到用戶ID,獲取服務器時間然后把數據一起存入數據庫中
  3. 服務端返回文檔ID給前端

修改文檔

這里的修改是指修改文檔的內容。我們為了及時保存用戶編輯的內容,需要在用戶編輯過程中實時把數據傳遞給服務端。如果每次都發送全部文檔內容給服務端,雖然服務端的處理邏輯會比較簡單,但是每次請求都有很多冗余數據,浪費大量的帶寬。所以我們最好只發送變化的內容給服務端,讓服務端根據當前文檔內容和變化內容合并生成最新的文檔內容。

如何發送變化的內容呢?我們可以把用戶對文檔內容的操作分成三類:「新增、修改、刪除」。新增就是給文檔添加內容,修改就是修改文檔的某一段內容,刪除就是刪除了文檔的某一段內容。對這三類操作我們可以使用Json形式來表示:

  1. {  
  2.   op:""// 操作 add:新增,update:修改, delete:刪除     
  3.   start:""// 開始位置下標     
  4.   end: ""// 結束位置下標     
  5.   text:""// 修改內容 

這樣修改文檔的流程就是

  1. 前端生成修改數據發送給服務端
  2. 服務端從數據庫中獲取文檔內容,然后根據用戶的行為合并操作,最后保存到數據庫中。

用戶在編輯一篇文章時,往往需要很多次數據傳輸。Json的數據格式雖然能很好的表達語意,但是每次傳輸也需要發送較多的字節,浪費帶寬;而且Json的序列化和反序列化過程也相對低效。我們可以采用Google的Protobuf協議來代替,它是基于二進制的傳輸協議,在傳輸內容大小和解析速度上都強于Json。

  1. message Doc {     
  2.   enum Op{         
  3.     add:0;         
  4.     update:1;         
  5.     delete:2;     
  6.   }     
  7.   required Op op = 0;     
  8.   required int32 start = 1;        
  9.   required int32 end = 5;     
  10.   string text = "修改內容"     

這里協議比較簡單,自己按照規則拼接字符串也是可以的。考慮到后續功能的可擴展性,還是建議采用Protobuf協議。

修改文檔的流程還有順序問題,我們假設用戶的操作是這樣的:

  1. 用戶先刪除了5個字“12345”
  2. 添加了5個字“一二三四五”
  3. 又修改了其中的前兩個字是“你好”

正常順序下最后的結果是:「你好三四五」。但是如果服務端的執行順序變成了3、1、2,那最后的結果變成了:「一二三四五」。這顯然是不符合預期的。所以我們要保證服務端順序處理前端發過來的請求。

保證順序執行有幾個方案:

  1. 前端請求由異步變成同步
  2. 前端每次請求都生成連續遞增的ID,服務端判斷如果遞增ID不連續了,就短暫的等待
  3. 把對同一個文檔的操作代理到同一個服務器,服務端單進程接收請求,并把數據存入有序隊列。隊列的消費端正常消費就可以了。

方案一在請求多的時候,處理效率太低會影響用戶體驗,可以直接排除掉。方案二主要依賴客戶端生成遞增ID,是比較不錯的方案。方案三依賴單進程和有序隊列保證順序。雖然單進程在并發量高的情況下很難抗壓,但是如果根據文檔ID去做負載均衡也可以比較好的控制流量,畢竟對一個文檔的修改QPS也高不到哪去。
當然也可以把方案二和方案三結合使用。

查看文檔

  1. 前端發送要查看的文檔ID給服務端
  2. 服務端根據文檔ID返回文檔內容

刪除文檔

  1. 前端發送要刪除的文檔ID給服務端
  2. 服務端根據文檔ID刪除對應文檔

權限管理

當前需求的權限場景特別適合「ABAC」的權限模型。
用戶屬性:只要是正常登錄用戶即可
環境屬性:普通的文檔內容
操作屬性:文檔的讀和寫
對象屬性:文檔

所以,我們存儲權限信息的表結構主要字段有:

下面介紹下該模塊的主要邏輯。

開通權限

  1. 前端發送文檔ID和權限類型(讀/寫)給服務端
  2. 服務端根據文檔ID和Token中的用戶ID,在權限表中添加記錄,并返回成功

刪除權限

  1. 前端發送文檔ID和權限類型(讀/寫)給服務端
  2. 服務端根據文檔ID和Token中的用戶ID,在權限表中刪除記錄,并返回成功

校驗權限

我們可以實現一個中間鍵,當用戶請求某文檔內容時,判斷其是否為創建者。如果不是再從權限表中查詢用戶是否有權限查看或者編輯權限。修改文檔內容時也是同樣的邏輯,就不再贅述了。

協作

合并沖突

當多個人同時修改一個文檔時,處理內容沖突的幾種方式:

  1. 文檔加鎖:當有人修改文檔時,對整個文檔加寫鎖,別人都只能看不可編輯。雖然實現簡單,不過協作的體驗會特別差。
  2. diff+patch的合并算法:diff+patch是常用的文檔內容比較和合并算法,Linux本身就提供了diff和patch命令支持文件的比較和合并。git也使用了diff+patch方法來合并文件,當無法解決沖突時,會把沖突拋給用戶手動合并。
  3. OT算法:相比diff+patch來講OT算法往往能帶來更好的合并結果。不過OT算法的實現也更復雜一些。目前Google文檔、騰訊文檔、石墨文檔等都是采用了OT算法。我們后面單獨寫文章來聊一聊diff+patch和OT算法。

協作通知

為了更好的協作,文檔編輯者需要看到同時編輯文檔的人,還需要看到別人修改的內容,來減少沖突,達到協作的目的。

大家打開文檔編輯頁面的時間是不同步的,為了讓大家「互相看到」,而且互相看到對方「修改的內容」,就需要服務端主動給客戶端推送消息。此場景下采用長鏈接的方案是比較合適的。

前文也提到過,文檔修改頻繁的時候,發送數據的頻次會很高,如果是HTTP請求會導致每次請求都攜帶頭信息,建立連接等開銷,所以修改文檔內容的數據上報也可以采用長鏈接。同時,服務端維護一個「協作列表」來存放所有正在被編輯的文檔和每個文檔的在線用戶,可以類比為一個聊天室。

文檔修改者加入

  1. 前端打開一個文檔時,發送請求給服務端,服務端檢查協作列表中是否有當前文檔。
  2. 如果有則把當前用戶加入此文檔修改者列表;如果沒有就把當前文檔加入協作列表,同時把當前用戶ID寫入其中。
  3. 服務端通過長鏈接給文檔列表中的所有其他用戶推送消息,告知大家有用戶加入協作。

文檔修改者退出邏輯和加入基本相同就不再贅述了。

「修改內容」

  1. 前端把修改數據發送給服務端
  2. 服務端暫存多個用戶的操作,并根據OT算法把用戶操作合并,最后和數據庫存儲的文檔內容合并
  3. 把合并完的文檔內容保存到數據庫中
  4. 服務端根據文檔ID,讀取協作列表中的用戶,給所有用戶發送合并結果
  5. 客戶端把合并結果與本地文檔內容合并

文檔編輯器

「編輯功能」

文檔編輯器需要支持,文檔內容編輯、文字樣式調整、插入圖片、插入鏈接等一系列功能。 實現內容可編輯的方案有textarea標簽和contenteditable屬性可以選擇。但是textarea標簽對其他需求的實現很難支持,而且不方便控制。所以我們選用contenteditable=true來實現文檔內容的編輯。

「上報功能」

文檔修改時,內容的上報,需要文檔編輯器處理好。不能用戶每輸入一個字符就上報一次,這樣頻繁的發送數據會給服務端帶來很大壓力,也是沒有必要的。所以客戶端的上報需要做防抖處理。上報的過程中有可能會因為網絡閃斷等原因導致上報失敗,此時需要重試。

服務可能因為長時間的網絡中斷或者服務器異常導致數據上報失敗。此時前端可以先把用戶修改存儲在瀏覽器本地的LocalStorage中,不過需要注意瀏覽器本地緩存通常有5M的大小限制。本地存儲除了在網絡異常時發揮作用,在實現Ctrl+Z操作時,也可以起到記錄之前操作的作用。

「長鏈接」

需要有一個單獨的模塊管理長鏈接,統一處理上報的接口和服務端下發的數據,做好數據的封裝和解析;并及時的反饋給用戶連接成功、數據保存成功、連接異常等信息。

「大文檔的加載」

對于大文檔的加載,我們需要做異步處理。根據滾動條滾動的位置,在服務端異步的獲取更多數據。

「其他功能」

前端編輯器的其他模塊我們可以根據其功能范圍拆分:比如控制文字大小、顏色的功能模塊;控制文字對齊方式的模塊;控制插入內容的模塊;支持Ctrl+C、Ctrl+V、Ctrl+Z的模塊等等。拆分好之后根據功能實現就可以了,這里就不一一分析了。

技術選型

「存儲」

存儲方面,當前場景使用關系型數據庫比較合適。我們可以根據文檔和用戶的數量級選擇合適的數據庫。通常千萬級別的數據量選擇MySQL就可以了,如果數據更多的話我們可以選擇TIDB或者MySQL分庫分表的方案。
當然采用MongoDB和PG也都可以滿足需求,我們可以結合公司的DBA運維能力自行選擇。

補充一下,如果考慮文檔內容的搜索,只選擇一種存儲結構是不夠的。需要單獨為文檔建立索引,可以選擇使用ES集群為文檔創建全文索引。而且索引的創建和MySQL的增刪改比起來是比較耗時的操作,所以創建索引往往放在異步流程中。而且用戶創建一個文檔也很少立馬就對它搜索。

「長鏈接」

當前常用的長鏈接方案主要有“HTTP/2 + SSE”和WebSocket兩種,WebSocket更成熟一些,優先選擇。

「消息隊列」

建議采用RocketMQ,因為

  1. RocketMQ支持同步/異步刷盤,支持同步/異步寫副本,消息的可靠性更有保障。
  2. RocketMQ支持順序消息。

當然寫入性能方面要比Kafka弱一些。但是在線文檔的場景里,消息的可靠性和順序更加重要。

架構設計

基于上面的分析,我們設計的部署架構圖如下

其中,接入層負責用戶的鑒權和長鏈接保持;其他各模塊負責各自的功能。文檔修改的隊列我們采用MQ發送,文檔管理模塊消費。Redis我們用來存放多人協作時的文檔和用戶對應關系。當然數據量不大時MQ也可以使用Redis臨時代替。

總結

以上就是我對多人協作在線文檔的分析和設計方案,其中包含了前后端交互流程、文檔的存儲和服務的部署方案。為了突出主要問題和邏輯,文中很多設計和技術點都是點到為止,給大家造成困擾的地方大家可以自行搜索下關鍵字或者留言交流。

責任編輯:梁菲 來源: 一行舟
相關推薦

2021-09-08 15:43:03

在線寫作協作文檔辦公軟件

2021-03-28 17:21:15

Git分支策略

2011-11-30 16:37:58

sync

2021-08-30 17:35:17

開發在線文檔多人協作

2011-11-30 16:08:14

YC新銳Stypi

2022-03-04 09:02:01

StoryBoard工具git

2012-06-12 09:51:43

在線思維

2021-08-30 14:41:16

在線文檔協同辦公騰訊文檔

2011-11-30 15:57:18

2016-11-10 07:50:55

群暉云端Office

2011-11-30 16:06:16

20個實用的在線協作

2025-09-18 12:28:22

2011-11-30 15:57:18

談企業協同應用

2009-07-14 08:26:46

微軟網絡版Office網絡版Office功能Office 2010

2011-11-30 16:20:56

20款免費或廉價的在線

2021-08-30 16:48:24

在線文檔

2011-11-30 15:28:32

在線協作系統

2011-11-30 16:21:32

5款在線協作數字白板

2020-02-05 18:24:24

飛書
點贊
收藏

51CTO技術棧公眾號

国产美女直播视频一区| 亚洲网站在线播放| 黄色国产一级视频| 免费在线超碰| 国产一区二区精品久久99| 久久久久国产精品一区| 蜜桃传媒一区二区亚洲| 久久亚洲精精品中文字幕| 精品久久久久久中文字幕| 婷婷亚洲婷婷综合色香五月| 亚洲老妇色熟女老太| 日精品一区二区三区| 欧美精品在线网站| 五月天精品视频| silk一区二区三区精品视频| 欧美影院一区二区| 国产3p露脸普通话对白| 男人影院在线观看| 久久免费视频一区| 92裸体在线视频网站| 日本久久综合网| 欧美天天视频| xxxxxxxxx欧美| 久久精品成人av| 亚州一区二区| 69久久99精品久久久久婷婷| 欧美激情国产精品日韩| 日本一级理论片在线大全| 国产精品欧美极品| 日本亚洲欧洲精品| 欧美新色视频| av亚洲精华国产精华| 91传媒免费看| 97久久人国产精品婷婷| 免费成人在线影院| 国产精品igao视频| 久久久久久不卡| 亚洲人体偷拍| 久久久久九九九九| 欧美精品入口蜜桃| 亚洲一区 二区 三区| 色哟哟入口国产精品| 午夜在线观看一区| 蜜桃国内精品久久久久软件9| 亚洲经典中文字幕| 久久免费精品国产| 极品国产人妖chinesets亚洲人妖| 制服丝袜av成人在线看| 欧美成年人视频在线观看| 经典三级一区二区| 欧洲精品中文字幕| www.xxx亚洲| 日韩精品99| 色婷婷精品大在线视频| 欧美牲交a欧美牲交aⅴ免费真| a级大胆欧美人体大胆666| 亚洲一区欧美一区| 国产美女主播在线| а√在线中文在线新版| 欧美日韩一区二区在线| 一女被多男玩喷潮视频| 婷婷六月国产精品久久不卡| 色妞www精品视频| 亚洲综合色在线观看| 久久久久久久性潮| 欧美一级日韩免费不卡| 特黄特色免费视频| 天天躁日日躁狠狠躁欧美巨大小说 | 欧美久久久久久久| h视频网站在线观看| 国产精品久久午夜夜伦鲁鲁| 色撸撸在线观看| 丝袜在线观看| 欧美日韩国产精品一区| 日本va中文字幕| 四虎视频在线精品免费网址| 日韩午夜激情免费电影| 影音先锋黄色资源| 精品一区二区三区在线| 久久人人爽亚洲精品天堂| 久久精品黄色片| 99在线|亚洲一区二区| 欧美在线中文字幕| 91禁在线观看| 99这里都是精品| 一本一生久久a久久精品综合蜜| 欧美精品hd| 亚洲韩国一区二区三区| 看欧美ab黄色大片视频免费| 精品国产三级| 日韩高清av一区二区三区| 亚洲精品天堂网| 在线免费高清一区二区三区| 国产精品男女猛烈高潮激情| www.黄色片| 欧美国产成人在线| 精品成在人线av无码免费看| se69色成人网wwwsex| 欧美不卡激情三级在线观看| 中文字幕网站在线观看| 红桃视频国产一区| 国产精品丝袜视频| 日韩电影免费| 一区二区在线观看免费视频播放| 久久精品午夜福利| 亚洲精品一二三**| 最近2019中文字幕大全第二页| 国产午夜精品无码| 精品一区二区在线免费观看| 久久亚洲免费| 青草在线视频| 欧美高清视频一二三区 | 日韩欧美成人区| 伊人成人免费视频| 波多野结衣在线播放一区| 久久久久久欧美| 99在线精品视频免费观看软件| 久久久久久久久蜜桃| 超碰成人免费在线| 国产在线一区不卡| 色偷偷av一区二区三区乱| 国产成人一级片| 成人免费视频一区| www.国产二区| 欧洲一区在线| 日韩有码视频在线| 中文字幕av资源| 久久精品在线观看| 俄罗斯av网站| 九九热播视频在线精品6| 欧美成人午夜剧场免费观看| 波多野结衣黄色网址| 久久综合久色欧美综合狠狠| 9色porny| 岛国av一区| 久久久久久国产精品| a毛片在线免费观看| 综合中文字幕亚洲| 国产永久免费网站| 久久免费av| 国产美女高潮久久白浆| 成人在线高清视频| 欧美日韩国产综合视频在线观看| 国产毛片久久久久久久| 日韩国产欧美在线观看| 色吧亚洲视频| 久久精品xxxxx| 色综合影院在线| 一二三区在线播放| 亚洲欧美在线高清| 男人午夜视频在线观看| 亚洲乱码免费伦视频| 亚洲自拍偷拍色片视频| 污片在线免费观看| 精品国产1区2区3区| 日韩av在线播| 2022国产精品视频| 88av.com| 99久久婷婷| www.久久草| а√在线中文网新版地址在线| 日韩电影免费观看在线观看| 欧美一级特黄视频| 欧美激情综合在线| 91 视频免费观看| 亚洲调教视频在线观看| 久久亚洲综合网| 国产成人午夜性a一级毛片| 久久精品一区中文字幕| 亚洲av无码国产综合专区| 亚洲国产精品一区二区www| 日本高清www| 蜜臀91精品一区二区三区| 自拍亚洲欧美老师丝袜| 中文字幕一区二区三区四区久久| 亚州国产精品久久久| 国产在线一在线二| 欧美一区二视频| 成人免费a视频| 中文在线资源观看网站视频免费不卡| 午夜一级免费视频| 国产精品腿扒开做爽爽爽挤奶网站| 日本不卡一区二区三区视频| 精品999日本久久久影院| 69视频在线免费观看| 最新电影电视剧在线观看免费观看| 91精品国产综合久久精品麻豆| 国产一级二级毛片| 国产欧美日韩亚州综合 | 欧美激情亚洲国产| 国产在线观看网站| 精品欧美一区二区三区精品久久| 国产又黄又猛又粗又爽| 亚洲女同一区二区| 色一情一交一乱一区二区三区 | 漂亮人妻被黑人久久精品| 青娱乐精品视频在线| 男女激情免费视频| 国产不卡av一区二区| 99精彩视频在线观看免费| 亚洲人免费短视频| 久久欧美在线电影| 毛片在线视频| 亚洲色图日韩av| 亚洲精品成人区在线观看| 91国偷自产一区二区使用方法| 九九视频免费观看| 国产精品久久久久久久午夜片| 99re这里只有| 国产成人午夜视频| 日日干夜夜操s8| 噜噜噜91成人网| 欧美国产视频一区| 天天超碰亚洲| 日韩精品伦理第一区| 久久大胆人体视频| 99视频在线| 国产精品xnxxcom| 国产精品视频1区| 性欧美hd调教| 欧洲精品毛片网站| 久草在线资源福利站| 久久久久久久久久av| caoporn免费在线| 最新亚洲国产精品| lutube成人福利在线观看| 日韩精品中文字幕久久臀| 亚洲国产中文字幕在线| 日韩三级免费观看| 国产乱子伦精品无码码专区| 欧美午夜在线观看| 久久久久久亚洲av无码专区| 狠狠躁夜夜躁人人躁婷婷91| 国产精品不卡av| 亚洲五码中文字幕| 精品少妇爆乳无码av无码专区| 亚洲精品欧美二区三区中文字幕| 天天躁日日躁aaaa视频| 国产三级欧美三级日产三级99| 亚洲精品成人无码熟妇在线| 国产99精品国产| 特级特黄刘亦菲aaa级| 国产精品亚洲午夜一区二区三区| 国产精品久久久久久9999| 国产尤物一区二区在线| 一级黄色大片儿| 国产一区日韩二区欧美三区| 三级黄色片免费看| 国产乱人伦精品一区二区在线观看| 极品粉嫩美女露脸啪啪| 狠狠色丁香婷婷综合久久片| 特级西西444www| 国内精品久久久久影院色| 一起草最新网址| 成人激情文学综合网| 欧美日韩一区二区三区四区五区六区| 粉嫩13p一区二区三区| 性高潮免费视频| 91在线观看一区二区| 国产美女免费无遮挡| 国产精品污www在线观看| 网爆门在线观看| 亚洲男同性视频| 国产精品theporn动漫| 日韩欧美在线看| 一区二区自拍偷拍| 日韩欧美精品在线视频| 欧美 日韩 国产 成人 在线| 亚洲裸体xxxx| 日本在线天堂| 久久久亚洲国产| 深夜成人福利| 91亚洲国产成人精品性色| 嗯用力啊快一点好舒服小柔久久| 久久国产精品免费一区| 欧美午夜精品一区二区三区电影| 自拍视频一区二区三区| 亚洲激情精品| 久久久精品麻豆| 国产成人午夜高潮毛片| 国产ts丝袜人妖系列视频| 国产欧美日韩卡一| 91麻豆免费视频网站| 日韩欧美国产网站| 99在线精品视频免费观看软件| 日韩高清中文字幕| 免费黄网站在线播放| 91chinesevideo永久地址| 国产69精品久久久久9999人| 99在线观看视频| 欧美日中文字幕| 九九爱精品视频| 九九九久久久精品| 最新中文字幕视频| 亚洲乱码国产乱码精品精可以看 | 一区二区三区四区国产| 日韩亚洲国产欧美| 好看的日韩av电影| 午夜精品在线视频| 色8久久影院午夜场| 亚洲一区制服诱惑| 香蕉一区二区| 乱子伦一区二区| 天堂精品中文字幕在线| 中文字幕无人区二| 国产精品网站一区| 国产精品一区二区6| 欧美人体做爰大胆视频| 国产99久久九九精品无码免费| 亚洲精品视频二区| 亚洲性图自拍| 国产精品视频白浆免费视频| 精品久久ai电影| 亚洲AV无码成人精品一区| 久久久夜夜夜| 亚洲精品乱码久久久久久久| 亚洲欧美电影院| 中文字幕一区二区在线视频| 日韩精品一区二区视频| 青青草原av在线| 亚洲va电影大全| 四虎8848精品成人免费网站| 欧美成人xxxxx| proumb性欧美在线观看| 精品无码免费视频| 欧美一区二区黄| 国产黄大片在线观看画质优化| 国产精品白嫩初高中害羞小美女| 少妇高潮一区二区三区| 水蜜桃色314在线观看| 粉嫩一区二区三区性色av| 538任你躁在线精品视频网站| 欧美性猛交一区二区三区精品| 色吊丝在线永久观看最新版本| 韩国19禁主播vip福利视频| 亚洲视频精选| 奇米777四色影视在线看| 国产精品一区二区你懂的| 成人高潮免费视频| 欧美一区二区人人喊爽| 韩国三级在线播放| 久久久久久免费网| 国产精品视频一区在线观看| 日韩高清有码在线| 345成人影院| 欧美精品尤物在线| 视频一区二区欧美| 免费一级做a爰片久久毛片潮| 色欲综合视频天天天| 狠狠狠综合7777久夜色撩人| 日本sm极度另类视频| 少妇精品久久久一区二区| 手机看片福利日韩| 中文字幕亚洲综合久久菠萝蜜| 国产又粗又猛视频| 欧美插天视频在线播放| 粉嫩精品导航导航| 六月丁香婷婷在线| 国产日韩欧美亚洲| 亚洲天堂中文网| 欧美成人精品在线观看| 成人自拍在线| 116极品美女午夜一级| 国产欧美一区二区精品性 | 欧美亚洲国产一区二区三区| 无遮挡动作视频在线观看免费入口| 91性高湖久久久久久久久_久久99| 欧美精品入口| 免费污网站在线观看| 欧美日韩一卡二卡三卡| 97超碰资源站在线观看| 精品视频在线观看| 国产精品视频久久一区| 丁香六月激情综合| 欧美变态tickling挠脚心| 午夜裸体女人视频网站在线观看| 天天人人精品| 国产成人丝袜美腿| 懂色av蜜臀av粉嫩av喷吹| 久久精品欧美视频| 秋霞影视一区二区三区| a在线观看免费视频| 亚洲高清免费观看高清完整版在线观看| 亚洲人成色777777精品音频| 国产美女久久久| 亚洲麻豆一区| 羞羞在线观看视频| 亚洲国产一区二区三区在线观看| 无人区在线高清完整免费版 一区二| 在线看视频不卡| 91伊人久久大香线蕉| 一二三区在线播放| 全亚洲最色的网站在线观看| 婷婷久久综合| 亚洲码无人客一区二区三区| 日韩视频免费观看高清完整版在线观看 | 青青草久久爱| 一本之道在线视频| 欧洲av在线精品| av午夜在线观看|