多執行緒+Socket實現多使用者多功能並行請求的服務端設計
阿新 • • 發佈:2019-01-08
目的:
本次要實現的目的時,服務端中每一個業務邏輯功能對應開啟一個埠,這些埠同時開啟,並且在該埠中可以同時接收多客戶端同時請請求。並行執行自然要用到多執行緒的知識,這裡不深入探討多執行緒的技術,簡單的應用即可。
多執行緒的簡單實現程式碼:
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();