技術 · AiThao

實時訊息

訊息應當在你傳送的瞬間出現在對方手機上,而且途中絕不能丟失。这是兩件不同的事,AiThao 按这個順序完成:先保存,再投递。

它為你做了什麼

  • 訊息和表情回應會立即出現在對方手機和你的其他裝置上。
  • 離線的手機重新上線後會補收所有訊息,不留空缺。

如何運作

每個應用程式都與伺服器保持一條经過認证的 WebSocket 連接。你傳送訊息時,伺服器先把它寫入資料庫,然後才發布事件。多個伺服器進程并行運行,通過共享的發布/訂閱通道相互傳递事件,因此哪個進程持有接收方的連接,就由哪個進程投递。

如果接收方離線,推送通知會唤醒他的手機,應用程式重新連接時會從重放日志中補收。在端對端加密的聊天中,这整個過程中傳递的是伺服器無法讀取的加密信封。

底層技術

WebSocket · Node.js · TypeScript · PostgreSQL · Redis

常見問題

沒有網路時傳送訊息會怎樣?

網路恢複後應用程式會自動傳送。伺服器一收到,就會在通知任何人之前先保存。

伺服器會保存加密訊息多久?

直到接收方的每部手機都收到副本為止,最长 30 天。