之前工作接觸了幾個開源的IM産品,再加上曾經用Netty實作過幾個服務,于是就有了用Netty實作一個IM的想法,于是用業餘時間寫了一個IM,和喜歡Netty的程式員們分享。
考慮到友善擴充,在服務端采用了Http+Socket結合的設計,用戶端所有的請求都基于Http,如發送消息、修改個人資訊等,所有的消息推送采用Socket方式即時推送到用戶端,這樣的設計可以在并發通路量大的情況下,将Http服務與Socket服務分開部署,減小各自的通路壓力。
Http服務也基于Netty實作,在Netty之上做了擴充,參考Spring MVC注解實作了netty-rest-server(
netty-rest-server),使用該架構,可實作注解注入REST controller,實作統一異常處理控制器和攔截器(如跨域攔截器、身份驗證攔截器等)。
Http服務和Scoket服務之間的解耦和通訊可使用Java内置的隊列或Redis釋出/訂閱實作,消息處理器接收到任務後,會将該任務交由線程池處理,處理後通過GroupChannel發送廣播或發給指定的Channel。