2017年1月18日 星期三

[Graffitalk] Day-1 ClientA 和 Server 和 ClientB 的糾葛


雖然以前也寫過 client - server的程式,但之間的關係就是很單純的API呼叫,沒有更複雜的互動關係.但是聊天室處理的的是眾多 client 端彼此之間的關係,中間透過 server 來溝通,有些看起來簡單的邏輯,認真追究都很傷腦.



就拿把筆刷傳過去為例好了,有好幾點小細節需要考量到

  • 雙方使用者的螢幕可能不一樣大,甚至一方使用手機一方使用電腦,如何能最適合讓兩人共享同一張畫布?
  • 當雙方使用者螢幕不一樣大的時候,如何保證我們兩個人畫的圖看到的圖是一模一樣的?
  • 畫圖其實就是把每個感應到的點畫出來,要怎樣傳輸才能兼顧效能和精細度?
  • 收到資料的那方怎樣把資料呈現在自己的畫布上? 
這些都是 Graffitalk 根本也是最重要的核心問題.最早的版本是:當 ClientA 在畫圖的時候,定時取一個點,即時的傳送給 server 再傳給Client B.如下圖:
但在另外一方看起來線條就不是很滑順~如果太頻繁的傳,又會造成 client 和 server 負擔.
簡單的畫圖功能在要同步的情況下變得相當複雜,更不用說後來還有開放不同筆刷,橡皮擦,還有著色圖的功能.