簡體   English   中英

用於Netty和socket.io的圖像服務器

[英]Image server for Netty and socket.io

我正在為我的體系結構中的以下問題尋找解決方案:

我有一個豐富的前端應用程序(React,RxJS,socket.io等)和一個寫在netty-socketio之上的Web服務層,我目前正作為Netty應用程序運行。 這個想法是服務器充當任何實現socket.io協議的客戶端都可以使用的API層,我的前端應用程序就是其中之一。 我可以在任何地方托管它,可能是CDN。

我遇到的問題是文件,更具體地說是圖像處理。 經典的用例是上傳用戶頭像。 我的普通socket.io協議不支持它,因此我提出了一些理論上的解決方案:

  1. 通過socket.io API將圖像上傳為二進制文件,將圖像存儲在服務器的文件系統中,也將它們作為二進制文件進行訪問。 我與此有關的問題是我必須要做的序列化/反序列化,而且使用不同的文件擴展名等似乎容易出錯。

  2. 此示例一樣 ,在Netty中實現HTTP解析器,並在同一實例中的不同端口上運行它。 我已經對此進行了測試,但它確實很低,我也不是Netty的專家。

  3. 創建一個單獨的HTTP文件服務器,也許使用servlet,並使用它存儲和引用圖像,將前端直接上傳到該服務器,然后僅發送對socket.io API的引用以保留在數據庫中。 我不確定的是,API基本上希望UI能夠處理自己的圖像存儲並僅報告引用,這似乎是不安全和不可控制的。

  4. 使用CDN代替(3)中描述的行為。 這將是一個很好的生產就緒解決方案,但在我的非生產系統中可能會適得其反。

請注意,在情況(3)和(4)中,我可以將前端托管在同一位置,現在我正在使用本地node.js http服務器。

我沒有考慮任何建議,意見和解決方案?

為了共享知識,我將回答我的問題。 我選擇了第二個選項,因為我不想將圖像存儲邏輯與應用程序的其余部分分開。 圖像上載現在是一個兩階段的過程:用戶在不同端口上將具有圖像主體的HTTP POST請求發起到同一ip。 Netty處理程序捕獲消息,並解析HTTP POST,這與引用的示例非常相似。 然后將圖像作為字節緩沖區(在有限的時間內)存儲在內存中,並在HTTP響應中返回唯一的UUID。 此后,客戶有責任通過websocket連接調用相關的API,發送相關的文本數據, 包含上述UUID作為對上載數據的引用。 然后,套接字處理程序將驗證此請求,根據臨時存儲中的哈希讀取字節緩沖區,然后將其寫入磁盤。 這樣做的好處是臨時緩沖區,因此可以在寫入磁盤之前正確驗證請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM