精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用Java建立穩(wěn)定的多線程服務(wù)器

開發(fā) 前端
要建立穩(wěn)定的服務(wù)器程序,消息隊列和線程池是很重要的。此外,也要考慮到很多的意外情況的發(fā)生。一般的程序員在寫完線程的run()方法的循環(huán)后就不管了,其實還應(yīng)該考慮跳出循環(huán)后的資源釋放等問題。本文將講述如何使用Java建立穩(wěn)定的多線程服務(wù)器。

Java語言是完全面向?qū)ο蟮模木€程機制和對象序列化特別容易使用,使用Java來建立一套多線程服務(wù)器要比使用其它語言方便的多,如果你再把它的異常處理機制利用好,那么你就可以建立一個商業(yè)級的多線程服務(wù)器了。由于采用了消息隊列和Socket傳輸方式,所以不會出現(xiàn)丟消息的問題。這套服務(wù)器可以作為實時聊天服務(wù)器、多人協(xié)同的協(xié)作服務(wù)器等。

消息系統(tǒng)的建立

這套服務(wù)器的消息系統(tǒng)采用的是對象傳輸?shù)臋C制,而不是以前常常使用的字符串傳輸。采用對象傳輸?shù)暮锰幨菙U展方便,如需要建立一個新的消息只需要從一個統(tǒng)一的基類繼承下來,然后再寫自己實現(xiàn)的方法就行了。這樣也符合面向?qū)ο箢I(lǐng)域里一條重要的原則: OCP(open_closed Principle),即一個好的設(shè)計應(yīng)該能夠容納新的功能的增加,但是增加的方式不是修改原有的類,而是添加新的類。

首先建立一個基類:Msg,該抽象類中有兩個域sender和receiver分別紀錄消息的發(fā)送者和接收者。這兩個域是在構(gòu)造消息類時就填寫的,receiver域可以為空,空表示發(fā)給誰都可以,由轉(zhuǎn)發(fā)服務(wù)器來決定。該類的方法包括取得這兩個域的值和消息的處理函數(shù)。消息的處理函數(shù)process()是空函數(shù),供繼承者重載。

建立了這個抽象基類后,你就可以繼承它完成你自己的類。舉個例子,假如我要建立一個分組協(xié)同工作的繪圖系統(tǒng),而且支持組員之間的對話,那么我可以建立如下的類集合:

SendTextMsg(String sender,String receiver,String info)//向指定的人發(fā)送對話。
  AddLineMsg(String sender,Point a,Point b)//在指定的點之間繪制一條直線
  AddRectangle(String sender,point start,Point end)//建立指定的矩形
  AddRotundaMsg(String sender,Point center,int radius)//建立指定的圓
  RemoveObjectMsg(String sender,int ID)//刪除指定編號的圖形對象
  ……

以此類推,可以建立很多的消息類。在每個類的內(nèi)部都由一個處理該類的方法process(),填寫該方法就可以實現(xiàn)對消息類的處理,而服務(wù)器只負責(zé)完成消息的轉(zhuǎn)發(fā)功能。這樣,一套消息系統(tǒng)就建立了。

服務(wù)器的結(jié)構(gòu)

如果要服務(wù)器實現(xiàn)同時為每個客戶端服務(wù),就要使用多線程,建立一個線程池,當有客戶端連接時就在池中開辟一個線程為它服務(wù)。同樣,要避免大量消息到達時處理不過來而導(dǎo)致丟失的情況,就要使用消息隊列。這個服務(wù)器是分層的處理的。

類關(guān)系圖如下所示:

 

服務(wù)器的工作過程是這樣的,建立了一個Server類作為主類,它含有程序的入口函數(shù)main()。在構(gòu)造函數(shù)中初始化一個數(shù)組存放ClientSingle類,它其實就是單獨處理一個連接用戶的類。然后啟動一個線程PORTListenThread,該線程的作用就是監(jiān)聽端口上有沒有人登陸,當有人連接時交給Server的addClient()處理。Server的addClient()方法會在剛才那個數(shù)組中建立一個ClientSingle對象,然后把剩下的事都交給它做。

#p#

端口監(jiān)聽線程類PORTListenThread

該線程類在run()函數(shù)的開始部分首先要檢查serverScoket是否為空,保證循環(huán)開始時不要出錯。然后進入一個死循環(huán)的監(jiān)聽:

 while(true) { //死循環(huán)監(jiān)
   try{Socket clientSocket=null;
       clientSocket=serverSocket.accept();
       server.addClient(clientSocket);//轉(zhuǎn)交Server處理
   }
   catch (IOException e){System.out.println("監(jiān)聽端口時出錯"+e);}//顯示錯誤
 }

單個客戶端在連接池中的映像類ClientSingle

每一個客戶端連接到服務(wù)器后,服務(wù)器會自動在連接池中建立該客戶端的一個映像,所有的操作都交給這個映像去具體執(zhí)行,所以ClientSingle中一定要包含客戶端的一些基本的信息。比如客戶端的名稱、登陸時間等等。在該類中有兩個消息隊列sendQueue(發(fā)送隊列)和receiveQueue(接收隊列)緩存消息。

ClientSingle類是繼承自Thread的,它還是一個調(diào)用者。在初始化的時候啟動兩個子線程類SingleSender和SingleListener運行。SingleSender負責(zé)監(jiān)聽指令發(fā)送隊列中有沒有指令,有則發(fā)送;SingleListener負責(zé)監(jiān)聽有沒有消息到達,有則把這些消息加入到接收隊列中去,由ClientSingle處理。所以ClientSingle的主要任務(wù)就是對這兩個隊列的處理。這兩個隊列可以用Vector實現(xiàn),非常地簡單。

 //-------將消息加入發(fā)送隊列中------------
 synchronized void send(Object o)
 { sendQueue.add(o);
 }

為了穩(wěn)定控制子線程的運行,并不鼓勵在run()方法的死循環(huán)標志都用true,而是使用了一個布爾型的變量finish。外部可以通過把這個標志置為假而停止線程的運行。

發(fā)送子線程類啟動后執(zhí)行run()中的循環(huán)(以finish為結(jié)束標志),在該循環(huán)內(nèi)首先判斷ClientSingle中的發(fā)送隊列是否為空,為空時睡眠一定的時間再重新判斷,這也是一個while循環(huán)。不為空則開始處理隊列中的消息,把它取出后放入輸出流中發(fā)送。

  public void run(){
     while (!father.finish){ //循環(huán)監(jiān)聽
       while(father.v.isEmpty()){ //當發(fā)送隊列為空的時候線程睡眠500毫秒
         try{Thread.sleep(500);}
 catch(InterruptedException e){System.out.println(e);}
       }
       if (!father.v.isEmpty()){  //發(fā)送隊列不為空時
        try{
           Object a=father.v.firstElement();//取出隊列中的***個消息
           father.v.removeElementAt(0);//從隊列中刪除
           oos.writeObject(a);//發(fā)送該消息
           oos.flush();
         }catch(IOException e){
           displayMessage(" 傳輸失敗 !");
           father.finish=false;
         }
       }
     }
}

接收子線程SingleListener類和發(fā)送子線程是類似的,它們的run()方法都差不多。不同的是接收子線程把收到的消息加入到ClientSingle的接收隊列中去,由它處理。

ClientSingle類的run()方法就在循環(huán)地讀取接收隊列receiveQueue中的內(nèi)容,為空時等待;不為空時依次取出處理和轉(zhuǎn)發(fā)。處理消息的函數(shù)是processMsg(),它只是執(zhí)行消息類自己的process()方法罷了。在處理完后,會調(diào)用Server類的方法進行各種類型的轉(zhuǎn)發(fā)。

#p#

分組轉(zhuǎn)發(fā)的實現(xiàn)類Group

為了實現(xiàn)對客戶端分組,我建立了Group類。在這個類中有一個列表存放已經(jīng)存在于連接池中的那些ClientSingle類的引址。只要遍歷整個列表就能訪問所有組中的成員。這個列表可以用Vector實現(xiàn),也可以用哈希表,我推薦后者,主要是為了能夠按名字存取。

組對象本身也是可以存在Server類的組列表中的。

分組功能對多人的協(xié)同系統(tǒng)來說是非常重要的,特別是分組對某一個共享空間操作的時候。就以上面的協(xié)同繪圖系統(tǒng)為例,如果10個人里有三個人要另起爐灶,那么他們?nèi)齻€的畫板就不能讓其他人看到,這就必須有"組"個劃分。

主服務(wù)器類Server

Server類是最核心的類,它在這個框架中起到調(diào)度全局的作用,上面介紹的那些類都由它來統(tǒng)一的構(gòu)造和調(diào)用。

Server類的域包括一個定長的數(shù)組存放ClientSingle實例,它就是連接池的實現(xiàn)。還要有一個哈希表存放Group實例。Server類的方法都是對這兩個類的操作。

建立ClientSingle數(shù)組的目的是保證服務(wù)器的穩(wěn)定性。其實,你也可以選擇不建立它,只是動態(tài)地構(gòu)造對象,但是那樣不好管理連接的用戶,而且由于各種操作系統(tǒng)對進程的處理不同,動態(tài)建立服務(wù)線程會很不穩(wěn)定。所以我先建立一個數(shù)組作為這些對象的容器,在開始時就估計好連接者的***數(shù)量。Server類的addClient()函數(shù):

void addClient(Socket socket){
     int c=0;
     try{while (sch[c]!=null) c++;}//搜索數(shù)組中的空余空間
     catch(ArrayIndexOutOfBoundsException e){
       try{ socket.close();}//出現(xiàn)異常關(guān)閉槽連接
       catch(IOException ee){ System.out.println("數(shù)組溢出");}
       return;
    }
     sch[c]=new ClientSingle(c,socket,father,this);//在搜索到的位置建立ClientSingle對象
 }

erver類中轉(zhuǎn)發(fā)的方法有:sendToAll()、sendToOne()、sendToGroup()等等。這些方法都是對線程池中的方法的操作,比較簡單,不外乎都是找到線程池中的某個ClientSingle對象,然后調(diào)用它的send()方法罷了。

注意:這些轉(zhuǎn)發(fā)的方法可能被很多子線程同時調(diào)用,所以為了保持線程的穩(wěn)定,千萬記住要在方法前加synchronized關(guān)鍵字。

【編輯推薦】

  1. Java EE開發(fā)三劍客現(xiàn)狀及發(fā)展淺析
  2. Java EE的Web服務(wù)原理和體系結(jié)構(gòu)
  3. 三步學(xué)會Java Socket編程
責(zé)任編輯:楊鵬飛 來源: IBM
相關(guān)推薦

2009-02-27 11:15:00

多線程服務(wù)器MTS專用服務(wù)器

2011-12-08 13:04:06

JavaNIO

2010-03-17 17:54:25

java Socket

2010-03-19 14:01:55

Java Socket

2010-03-16 10:50:21

Java多線程服務(wù)器

2010-08-03 11:49:26

Ubuntu nfs服

2009-11-23 17:23:59

DNS服務(wù)器內(nèi)部建立

2010-03-16 13:47:48

Java多線程服務(wù)器

2011-06-30 18:03:58

QT 多線程 服務(wù)器

2018-12-20 09:36:24

2010-09-06 17:08:23

2010-08-26 13:04:06

DHCP服務(wù)器

2010-07-01 09:47:18

DNS服務(wù)器BIND

2010-03-24 11:49:37

Turbo Linux

2015-10-27 09:40:31

TCPIP網(wǎng)絡(luò)協(xié)議

2010-09-02 14:56:03

建立DHCP服務(wù)器

2011-12-07 17:05:45

JavaNIO

2021-09-11 15:26:23

Java多線程線程池

2010-08-06 13:12:55

NFS服務(wù)器

2010-07-21 11:29:24

點贊
收藏

51CTO技術(shù)棧公眾號

色菇凉天天综合网| 日韩高清欧美激情| 亚洲成人a级网| 国产精品宾馆在线精品酒店| 麻豆导航在线观看| 久久99热国产| 国内精品伊人久久| 亚洲精品视频网址| 911亚洲精品| 色诱视频网站一区| 91成人在线视频观看| 三级小视频在线观看| 蜜桃av一区二区三区| 久久人人爽人人爽人人片av高请 | 97精品资源在线观看| 亚洲国产精品影院| 曰韩不卡视频| 蜜桃视频在线观看视频| 国产精品123区| 国产精品极品美女在线观看免费| 久久午夜无码鲁丝片午夜精品| 国产成人一区| 亚洲国产高潮在线观看| 精品亚洲视频在线| 春暖花开亚洲一区二区三区| 亚洲一区二区三区中文字幕在线| 亚洲最大免费| 国产女人在线观看| aaa亚洲精品一二三区| 91久久久久久久| www.五月婷婷.com| 国产日本精品| 午夜欧美大片免费观看| 乱h高h女3p含苞待放| 精品香蕉视频| 亚洲男人的天堂在线| 亚洲免费观看在线| 日韩一区免费| 91精品国产综合久久精品麻豆| 成人精品视频一区二区| 蜜桃视频在线网站| 亚洲第一主播视频| 日b视频免费观看| 大片免费在线看视频| 国产精品美女久久久久久久久 | 国产h在线观看| 91一区二区在线| 国产乱人伦精品一区二区| 国产三级第一页| 精品无人区卡一卡二卡三乱码免费卡 | 精品国产第一页| 亚洲国产999| 国产成人精品影视| 99国产视频| 亚洲精品综合久久| 成人一级视频在线观看| 成人在线免费网站| 欧日韩在线视频| 波多野洁衣一区| 国产一区二区视频在线免费观看| 亚洲乱熟女一区二区| 国产成人午夜电影网| 91国产丝袜在线放| 国产高清在线免费| 成人一区二区三区视频在线观看 | 国产无套粉嫩白浆在线2022年| 91丨九色丨蝌蚪丨老版| 麻豆久久久av免费| 国产女人在线观看| 亚洲欧美一区二区在线观看| 99中文字幕在线观看| 免费在线一级视频| 中文一区在线播放| 国产又粗又硬又长| 韩国成人免费视频| 欧美性猛xxx| 一本久道综合色婷婷五月| 小明成人免费视频一区| 69p69国产精品| 成人做爰69片免费| 亚洲警察之高压线| 精品国产一区二区三区在线观看 | 美女在线视频免费| 在线观看欧美精品| 色网站在线视频| 久9re热视频这里只有精品| 亚洲欧美另类人妖| 日本高清一二三区| 亚洲精品社区| 国产精品va在线播放| 国产精品乱码一区二区| 成人av在线一区二区| 色大师av一区二区三区| h片在线观看网站| 欧美性xxxxx极品| 一区二区久久精品| 亚洲理论电影| 欧美美女操人视频| 国产成人无码专区| 国产91富婆露脸刺激对白| 日韩福利视频| 久久一卡二卡| 欧美日韩国产系列| 无码人妻aⅴ一区二区三区| 欧美成人精品一区二区三区在线看| 欧美另类xxx| 午夜一区二区三区四区| 粉嫩欧美一区二区三区高清影视| 欧美人与物videos另类| 日本h片在线| 欧美色爱综合网| 国产精品久久久久久久无码| 99热在线成人| 日韩免费av片在线观看| 亚洲精品成av人片天堂无码| 中文字幕久久午夜不卡| 女人和拘做爰正片视频| 999久久久久久久久6666| 色妞一区二区三区| 国产精品自拍99| 粉嫩aⅴ一区二区三区四区五区| 视频一区视频二区视频三区视频四区国产| 国产理论电影在线| 欧美精品tushy高清| 男人操女人动态图| 国产欧美三级| 国产超碰91| 成人日韩欧美| 欧美猛男超大videosgay| 无码人妻精品一区二区中文| 亚洲激情在线| 国产精品免费区二区三区观看| 麻豆传媒免费在线观看| 欧美私人免费视频| 亚洲区免费视频| 一二三区精品| 国产一区二区不卡视频| 日本小视频在线免费观看| 欧美精品一级二级三级| 亚洲精品国产精品乱码在线观看| 日韩国产精品久久久久久亚洲| 久久久久国产精品视频| 国产丝袜在线播放| 日韩欧美国产精品一区| www欧美com| 国内一区二区视频| 在线成人av电影| 婷婷久久综合九色综合99蜜桃| 中国日韩欧美久久久久久久久| 无码人妻熟妇av又粗又大| 久久久精品天堂| 北条麻妃在线观看| 希岛爱理av免费一区二区| 日本高清+成人网在线观看| 三级在线播放| 色婷婷av一区二区| 性猛交娇小69hd| 麻豆精品国产传媒mv男同 | 伊人久久大香线蕉综合热线| 国产经品一区二区| 国产免费拔擦拔擦8x在线播放| 欧美精品一区二区三| 一区二区视频免费看| 国产成+人+日韩+欧美+亚洲| 日韩精品福利片午夜免费观看| 免费观看亚洲天堂| 久久人人看视频| 免费av在线电影| 2020国产精品极品色在线观看| 国产精品一区二区在线观看不卡| 一区二区免费电影| 亚洲毛片在线免费| 久久亚洲欧美日韩精品专区| 国产精品热久久| 亚洲在线一区二区三区| 李丽珍裸体午夜理伦片| 亚洲一区二区三区高清不卡| 日韩视频精品| a一区二区三区亚洲| 久草成人在线视频| 精品亚洲成a人| 路边理发店露脸熟妇泻火| 欧美经典一区| 国模私拍视频一区| 久草视频在线看| 欧美巨大另类极品videosbest| 免费视频一二三区| 久久综合狠狠综合| 制服丝袜中文字幕第一页| 尤物在线精品| 亚洲成色www久久网站| 91中文字幕永久在线| 99精品国产在热久久婷婷| 欧美精品在线一区| 大胆国模一区二区三区| 国产69精品久久久| av在线资源网| 亚洲精品在线三区| 中文字幕有码视频| 五月天一区二区三区| 黄色av片三级三级三级免费看| 风流少妇一区二区| 中文字幕在线导航| 亚洲大胆av| 一区二区成人国产精品 | 成人女保姆的销魂服务| 高端美女服务在线视频播放| 在线中文字幕日韩| 亚洲国产精品久久久久久6q| 欧美性一区二区| 午夜影院在线看| 日韩美女啊v在线免费观看| 国产精品一区二区入口九绯色| 国产在线乱码一区二区三区| 精品人妻一区二区三区免费看 | 最新视频 - x88av| 欧美一级色片| 成人h视频在线观看播放| 日韩欧美精品一区二区三区| 欧美xxxx做受欧美| 福利在线午夜| 日韩精品视频中文在线观看| 午夜精品小视频| 欧美人伦禁忌dvd放荡欲情| 精品人妻无码一区二区| 岛国一区二区在线观看| 在线免费观看视频黄| 最新亚洲一区| 欧美做暖暖视频| 最新欧美精品一区二区三区| 国产av人人夜夜澡人人爽麻豆| 日韩欧美视频| 日本欧洲国产一区二区| 久久动漫网址| 久久久亚洲国产美女国产盗摄| 亚洲www在线观看| 免费观看一级欧美片| 欧美激情亚洲另类| 日本美女高潮视频| 亚洲a一区二区三区| 天堂精品一区二区三区| 希岛爱理av免费一区二区| 国产精品视频入口| 6080成人| 国产精品大全| 国产极品模特精品一二| 成人欧美视频在线| 中文字幕一区图| 99久久这里有精品| 神马久久久久久| 成人动漫在线免费观看| 亚洲欧美另类人妖| 免费在线黄色网址| 亚洲无亚洲人成网站77777| 日韩精品123| 亚洲欧美日韩一区在线| 欧美色图另类| 日韩精品xxxx| 国产精品7m凸凹视频分类| 亚洲欧美国产精品桃花| 人人狠狠综合久久亚洲婷婷| 日韩欧美精品一区二区三区经典| 亚洲欧洲一区二区| 国产成人免费精品| 国产精品三级网站| 欧美黄色a视频| 亚洲自拍av在线| 136福利精品导航| 精品国产乱码久久久久久丨区2区 精品国产乱码久久久久久蜜柚 | 欧美交换配乱吟粗大25p| 中文字幕一区二区三区在线视频| a级片一区二区| 亚洲精品麻豆| 亚洲精品乱码久久久久久自慰| 老妇喷水一区二区三区| 亚洲小视频网站| 国产成人精品亚洲午夜麻豆| 中国极品少妇videossexhd| 久久久亚洲精品石原莉奈| 青青草自拍偷拍| 一区二区三区在线视频免费| 日本五十熟hd丰满| 欧美亚洲动漫精品| 国产浮力第一页| 亚洲精品白浆高清久久久久久| 国内在线精品| 欧美丰满少妇xxxx| 国产精品扒开腿做爽爽爽视频软件| 国产日韩欧美电影在线观看| www.豆豆成人网.com| 日本一区二区久久精品| 欧美日韩成人| 日本成人黄色网| 国产传媒欧美日韩成人| 伊人网伊人影院| 亚洲综合在线五月| 国产精品尤物视频| 精品噜噜噜噜久久久久久久久试看| 免费在线视频你懂得| 欧美大片在线看| av成人在线看| 国产综合精品一区二区三区| 国产精品福利在线观看播放| 国内自拍在线观看| 国内成人自拍视频| 实拍女处破www免费看| 一区二区三区精品久久久| 亚洲欧美一二三区| 精品国产制服丝袜高跟| 国产主播福利在线| 久久久久久成人| 亚洲精品大全| 日本黑人久久| 亚洲精品影视| 少妇愉情理伦片bd| 国产精品丝袜一区| 4438国产精品一区二区| 精品少妇一区二区三区在线视频| 91网在线播放| 国产成人短视频| 久久精品66| 无码人妻aⅴ一区二区三区日本| 奇米色一区二区| 国产精品久久久久无码av色戒| 亚洲国产一区二区三区青草影视| 亚洲一级在线播放| 国产亚洲精品日韩| 亚洲美女炮图| 精品国产乱码久久久久久蜜柚| 欧美私人啪啪vps| 久久久精品视频国产| 国产精品美女久久久久久久久久久 | 手机在线观看日韩av| 国产精品免费aⅴ片在线观看| 色一情一乱一伦| 精品无人区太爽高潮在线播放| 第一av在线| 国产精品二区在线| 欧美日一区二区三区在线观看国产免| 中文字幕永久有效| 国产精品嫩草99a| 中文字幕欧美在线观看| 在线播放亚洲激情| 成人亚洲网站| 亚洲亚洲精品三区日韩精品在线视频| 日韩高清电影一区| 久久日免费视频| 欧美日韩国产影片| 免费观看成人高潮| 91丝袜美腿美女视频网站| 亚洲高清影视| 日本黄色www| 一区二区视频在线| 欧美 日韩 国产 成人 在线 91| 久久久久久久久国产| 国产成人福利av| 国产一区二区在线视频播放| 91女神在线视频| 精品久久久久久久久久久国产字幕| 精品亚洲一区二区三区在线观看| 自拍偷拍亚洲视频| 日韩尤物视频| 九九**精品视频免费播放| 搜索黄色一级片| 精品成人免费观看| 涩涩视频在线播放| 日本精品一区二区三区视频| 蜜桃视频在线观看一区二区| 国产第一页浮力| 欧美精品一区二区在线播放| 欧美在线极品| 亚洲自拍的二区三区| 国产精品香蕉一区二区三区| 欧美日韩中文视频| 亚洲美女免费精品视频在线观看| 国产一区二区三区朝在线观看| 综合久久国产| 成人av电影在线| 久久久久久无码精品大片| 精品久久久999| 精品素人av| 一区二区三区 欧美| 亚洲精品国产视频| 日本一区高清| 91麻豆国产精品| 午夜宅男久久久| 一级片一级片一级片| 亚洲福利视频在线| 日本a人精品| 免费国产a级片| 中文字幕一区二区三| 色婷婷av一区二区三区之红樱桃 | 亚洲欧洲av一区二区三区久久| 亚洲国产精品suv| 国产精品第一区| 海角社区69精品视频| 极品蜜桃臀肥臀-x88av| 精品国精品自拍自在线| 国产日本久久| 亚洲色成人一区二区三区小说|