EasyIME / forum

8 stars 1 forks source link

[討論] 還是 IPC 架構問題 #17

Open PCMan opened 7 years ago

PCMan commented 7 years ago

@KenLuoTW @osfans @jessy1092 這邊需要跟大家溝通討論一個問題。上一版換成 web-based 的架構之後,後端就像是一般 web service,開發除錯比較容易,但後來發現有以下問題:

  1. 開 port 傳 http 容易被防毒軟體擋下 (已知 Bitdefender 會影響)
  2. http service 有 cache 機制會影響資料 consistency,雖然手動強制關閉了,但總感覺不太保險
  3. 正確維護每個 backend server 的狀態有難度,且 http request 有 timeout 問題, server side 的狀態發生改變也很難即時回饋回來
  4. 原先是希望這樣同一套架構也可以把 http server 跑在遠端,就可以變成 cloud-based,但後來想到如果複雜的認證機制像 oauth 那些,全讓 PIMELauncher 用 C++ 實做的話,不太實際。

所以現在有個新的提案: 不要用 http server,PIMELauncher 改直接用 pipe 和 python & node.js 的 stdin/stdout 相接。來自 client 的指令由 PIMELauncher 轉送進 backend 的 stdin,處理後的輸入法輸出 print 到 stdout,由 PIMELauncher 讀取後送回 client,每一行是一個 json message 這樣 python & node 就只需要 loop 從 stdin 讀入每一行的輸入,處理完畢後,把輸出 print 到 stdout,完全不需要任何 server,也不需要任何 thread or async i/o 架構。

有不少優點:

但缺點是:

關於除錯困難的部份,我打算自己寫一個除錯工具在 PIMELauncher 內,打開就可以看到中間的訊息內容,來補足 stdio 被拿去做 IPC 無法輸出 console 視窗來看 print 結果的缺點。

如果是這樣的方案,大家覺得可以接受嗎?Thanks! @jessy1092 特別需要你的意見,因為 node.js 不確定這樣改會不會很麻煩或是發生問題

PCMan commented 7 years ago

@KenLuoTW @osfans @jessy1092 BTW, 有個好消息,有位企業主來信表示願意贊助 code signing 的費用,正在洽談中,如果可以,下次就可以幫發行的執行檔簽章了,應該會減少一些被視為不明來源惡意程式的問題。

PCMan commented 7 years ago

@jessy1092 目前 libuv_experiment branch 內的 python 版本已經移植到使用 stdio 做 IPC 的版本,初步實驗滿穩定的,但是中間的資料格式可能還會改。我近期會把這部份完成。 @KenLuoTW @osfans 另外現在這個 branch 內多提供一個工具叫 PIMEDebugConsole,打開可以隨時連上 PIMELauncher 監看 debug message,這樣可以解決拿 stdio 做 IPC 後不容易印出 debug 內容的問題。

jessy1092 commented 7 years ago

@PCMan 話說這次也會先 release alpha 版嗎? 想實際安裝來測試一下 XD 主要是 debug 的方式,node 部分主要 debug 都會 stdout 出來,不確定會不會有影響

PCMan commented 7 years ago

@jessy1092 這裡有可以測試的版本: https://drive.google.com/file/d/0B4BhmC8V2mivOFhycFNZbkFyR0k/view?usp=sharing @KenLuoTW @osfans @jessy1092 我想要發行一個新版本,不知道你們這裡還有沒有什麼問題要修?另外新版的版本號,我有點想直接跳上 1.0,然後之後開始改用 semantic versioning 不知道大家覺得如何? 一路修修改改到現在,覺得 public API 差不多該穩定下來了。

PCMan commented 7 years ago

剛有發現 bug,我上傳了新的 installer (網址跟剛剛一樣)

Arthurmcarthur commented 7 years ago

PIME在輸入時,若切換窗口,則輸入提示框並不會自動消失,這個問題雖然不是bug,但是有時候意外的窗口切換,會給使用者帶來困擾,也與微軟倉頡等輸入法的行為不同。請問能否改成輸入提示框會在切換窗口後自動消失的形式,和微軟等輸入法的行為一致呢?

buaabyl commented 7 years ago

这个其实和httpserver的FastCGI模式很类似。