1. 程式人生 > >多執行緒+Socket實現多使用者多功能並行請求的服務端設計

多執行緒+Socket實現多使用者多功能並行請求的服務端設計

目的:

本次要實現的目的時,服務端中每一個業務邏輯功能對應開啟一個埠,這些埠同時開啟,並且在該埠中可以同時接收多客戶端同時請請求。

並行執行自然要用到多執行緒的知識,這裡不深入探討多執行緒的技術,簡單的應用即可。

多執行緒的簡單實現程式碼:

1、new一個Thread類物件2、重寫Thread的run方法3、在run中寫上該執行緒中要乾的事4、呼叫Thread.start()方法啟動執行緒
new Thread() {
    public void run() {
        //該執行緒中要實現的邏輯程式碼
}
}.start();
新建執行緒還有別的方式,比如寫一個類繼承Thread類或者實現Runnable介面,同時重寫他們的run方法等,他們的區別就在於當該類同時需要繼承別的父類時,由於一個子類只能繼承一個父類,所以不能同時繼承Thread類,但是可以同時實現多個介面,所以此時就需要通過實現Runnable介面來定義執行緒類。

多執行緒和Socket結合: 

上一篇汫過Socket的具體實現,本次將不再螯述
1、 將各個執行緒的開啟程式碼放入Thread的run方法中,同時開啟執行緒,這樣在程式執行時,這些執行緒可以同時開啟,各埠可同
時工作等待客戶端連線,這一步即可實現多功能埠同時開啟等待連線。
2、 ServerSocketacceptO方法的作用是阻塞式的等待客戶端連線,即如果沒有客戶端連線,程式會阻塞在此,所以為了實現多
客戶同時連線,必須一個埠可以同時等待多個監聽,在ServerSocketaccept ( ) 外 加 上 while迴圈,同時在監聽到客戶端請求
後為該客戶端開啟獨立的子執行緒處理該客戶的請求,這樣該埠可以立刻迴圈返回繼續監聽等待下一個使用者的連線。
流程如下圖:
//為該埠功能開啟獨立的執行緒
new Thread() {
    public void run() {
        try {
            ServerSocket ss = new ServerSocket(30000);
//迴圈監聽
while(true) {
                //阻塞監聽客戶請求
final Socket s = ss.accept();
//為該使用者新開一個執行緒獨立處理請求
new Thread() {
                    public void run() {
                        //處理該使用者請求的程式碼
} }.start(); } } catch (IOException e) { e.printStackTrace(); } } }.start();
至此,今天的目標實現了。具體程式碼可以參考上一篇博文服務端程式碼中第一個埠的寫法。