1 RPC
RPC也采用C/S的編程模式,以模塊調用的簡單性忽略通訊的具體細節,以便程序員不用關心C/S之間的通訊協議,集中精力對付實現過程.這就決定了 RPC生成的通訊包不可能對每種應用都有最恰當的處理辦法,與Socket方法相比,傳輸相同的有效數據,RPC占用更多的網絡帶寬.
RPC實在socket的基礎上實現的,但是它比socket需要更多的網絡和資源系統。
2 基於netty的長連接
異步、高性能
Boss線程(一個服務器端口對於一個)---接收到客戶端連接---生成Channel---交給Work線程池(多個Work線程)來處理。
具體的Work線程---讀完已接收的數據到ChannelBuffer---觸發ChannelPipeline中的ChannelHandler鏈來處理業務邏輯。
執行ChannelHandler鏈的整個過程是同步的,如果業務邏輯的耗時較長,會將導致Work線程長時間被占用得不到釋放,從而影響了整個服務器的並發處理能力。
3 websocket
WebSocket連接服務器和客戶端,這個鏈接是一個實時的長連接,服務器端一旦與客戶端建立了雙向鏈接,就可以將數據推送到Socket中,客戶端只要有一個Socket綁定的地址和端口與服務器建立聯系,就可以接收推送來的數據。
WebSocket 還是一個雙通道的連接,在同一個 TCP 連接上既可以發也可以收信息.
讓服務器和客戶端能夠發送 Ping/Pong Frame。這種 Frame 是一種特殊的數據包,它只包含一些元數據而不需要真正的 Data Payload,可以在不影響 Application 的情況下維持住中間網絡的連接狀態