JChatting簡介
JChatting是托管在google code上的一個開源項目,采用寬松的MIT License開源協議,軟件的第一個版本發布與2011年10月。
JChatting功能說明
1.用戶注冊,單點登錄;
2.好友添加、删除、修改;在線好友聊天,離線好友留言功能;
3.好友上線離線即時更新或者提醒;
4.創建、加入、退出Chat群;群聊功能;
5.用戶之間的文件發送功能(無文件大小限制);
6.RSA加密,保證服務器信息安全;
7.使用RMI技術擴展服務器,減輕單個服務器的負荷。
1.Users registe & Single login;
2.Add、delete friend,refresh friend list;Chat with online friends, leave messages to offline friends;
3.Refresh soft interface or give tip to user when friend online or offline;
4.Create、enter、quit chat group,refresh group list and Chat in group;
5.Send & receive file between friends(No file size limitations);
6.Encrypt using RSA;
7.Using RMI to add more server,reduce the load of single server.
JChatting起源
項目開始于2011年10月1号,來源于研究生一年級課程《分布式計算機系統》,課程導師要求制作一個簡單的chat程序,語言不限,正巧十一長假期間沒有安排,作者(紅色石頭主頁)想要做就好好做做試試,所以寫了大概一個星期的代碼完成初始版本,實現以上介紹的功能。采用sql server2000 + Java Swing + Java Socket原生api完成。後續于2012年3月籌備大手筆更新版本,打算采用mysql + Java Mine + Java SWT重新架構,使源碼質量高,可讀性,可學習型強,擴展性高,具有前瞻性設計。但是由于實驗室項目安排問題,一直擱置,這裡再次提出和介紹,以激勵自己完成既定的計劃。
JChatting開發思路
1. 消息的發送采用Java Socket TCP協議,數據發送采用字符流,後期會改為對象流簡化操作。
2. 用戶登錄之後,會在服務器端用戶登錄的socket,用戶點對點發送消息和用戶發送群消息,均發送到服務器端,由服務器解析數據包,将信息轉發給收信socket。即用戶之間的通信是采用服務器轉發,而非用戶與用戶之間直連。這樣設計是為了更好的監控聊天過程,統計聊天數據,同時減少客戶端端口占用。
3. 用戶之間發送文件,是發送端發送文件信息和個人的ip信息到接收端并建立文件發送的server socket,接收端接受文件發送之後,新建線程創建socket連接接收到的ip信息,其中端口是選擇一個從8089開始未被占用的端口。所以文件發送是客戶端之間直連發送文件,這樣設計是為了減輕服務器端壓力,加快文件發送速度。
4. 用戶還有信息目前是用戶登錄之後,服務器會将數據庫信息以rsa加密的方式發送給客戶端,客戶端使用這些信息直連數據庫獲得,這是一種不安全、非主流的做法,後續将采用rmi或者web service替換,并進行相應的session認證。
5. 多服務器減輕服務器壓力,突破并發瓶頸,用戶登錄之後會将個人session和socket保存到服務器,後續的消息發送會有服務器轉發,并發較大的時候,單個服務器會造成較大的消息延遲,甚至timeout,目前采用用戶id%n的方法将用戶信息散列到n個服務器,即使用n個服務器并行轉發用戶消息,目前的散列函數id%n存在散列不均的問題,待改進。
















