Netty 仿QQ聊天室(實戰二)
阿新 • • 發佈:2018-12-22
Netty 聊天器(百萬級流量實戰二):仿QQ客戶端
瘋狂創客圈 Java 分散式聊天室【 億級流量】實戰系列之15 【部落格園 總入口 】
寫在前面
大家好,我是作者尼恩。
今天是百萬級流量 Netty 聊天器 打造的系列文章的第二篇, 設計一個 仿QQ客戶端。
接下來,就需要一個比較高階、大氣、上檔次的 客戶端 UI介面了。
對於主要的UI介面實現,列表如下:
好友列表
訊息傳送UI
群訊息UI
找人和找群
客戶端的啟動程式碼如下:
public class MainDialog extends BaseDialog { private static final long serialVersionUID = 1L; private OnlyPanel topPanel = new OnlyPanel(); private OnlyPanel titlePanel = new OnlyPanel(); private OnlyPanel mainPanel = new OnlyPanel(); private OnlyPanel bottomPanel = new OnlyPanel(); private UserDataPanel userDataPanel = new UserDataPanel(); private TabPanel tabPanel = new TabPanel(); private Root userRoot = new Root(); private Root groupRoot = new Root(); private Root lastRoot = new Root(); public MainDialog() { super(new javax.swing.JFrame(), false); initComponents(); } /** * Creates new form MainDialog */ public MainDialog(java.awt.Frame parent, boolean modal) { super(parent, modal); initComponents(); initUserList(); } private void initComponents() { this.setSize(280, 630); this.setMinimumSize(new java.awt.Dimension(280, 530)); // ... } public static void main(String args[]) { try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(MainDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(MainDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(MainDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(MainDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } java.awt.EventQueue.invokeLater(new Runnable() { public void run() { MainDialog dialog = new MainDialog(new javax.swing.JFrame(), true); dialog.addWindowListener(new java.awt.event.WindowAdapter() { @Override public void windowClosing(java.awt.event.WindowEvent e) { System.exit(0); } }); Image imaeg = new ImageIcon("Resources/Images/Login/002.jpg").getImage(); BufferedImage bi = new BufferedImage(imaeg.getWidth(null), imaeg.getHeight(null), BufferedImage.TYPE_INT_RGB); Graphics2D biContext = bi.createGraphics(); biContext.drawImage(imaeg, 0, 0, null); bi = OnlyImageUtil.applyGaussianFilter(bi, null, 50); dialog.setBackgroundImage(bi); dialog.setVisible(true); } }); } }
寫在最後
至此為止,終於仿QQ的高大上 UI 客戶端介紹。
在這裡,致敬和感恩網友夏輝,本例項的UI程式碼,整合自他的mina 聊天器客戶端。他的專案也是開放的和學習型的,由於重寫一個客戶端,需要挺長時間的,這裡先借鑑一下,後續有時間,再重新實現。
為了完成百萬級的聊天,程式碼中,還是有很多需要優化的、升級的地方。
後續的文章,專門介紹如何優化。
瘋狂創客圈 實戰計劃
- Java (Netty) 聊天程式【 億級流量】實戰 開源專案實戰
- Netty 原始碼、原理、JAVA NIO 原理
- Java 面試題 一網打盡