java 板


LINE

先向版主及各位鄉民表示歉意 早上發完文後HINET那邊好像出了點問題,所以一直無法上來修文 -------------------------------------------------------------- 我的問題是這樣的 如果現在我用JAVA來寫一個聊天室的SERVER端 那麼在建立socket並傾聽client連接請求的部分 我會這樣寫 while(true) { //用WHILE LOOP 持續接收使用者 Socket clientSocket = serverSock.accept(); PrintWriter writer = new PrintWriter(clientSocket.getOutputStream()); clientOutputStreams.add(writer); Thread t = new Thread(new ClientHandler(clientSocket)); t.start(); System.out.println("got a connection"); } 上面中我用WHILE持續的監聽CLIENT端的連線請求 當有一個CLIENT連接上來後這個等待請求的執行緒便分配給他 然後創建一個新的執行緒以等待期他CLIENT的連接請求 這樣做最主要的用處,自然是解決SERVER端一次只能服務一個CLIENT的限制 但這時又出現了一個問題 "如果CLIENT連接上來後不做任何動作呢?" 既然這是一個聊天室,當CLIENT連上來後最主要的目的當然是進行文字傳輸 但是若同時有一百個CLIENT都連上了這個SERVER,但是每個人都在等待其他人發話 這是便發生了SERVER端創建了一百個thread但卻全都沒有真的使用到的狀況 換句話說,即使使用了多執行緒,不免得還是發生了讓程式等待並浪費、占用了資源 在VB中(或是該說再.NET Framework中),微軟提供了一種方法來避免發生這種狀況 即是使用 BeginXXX、EndXXX的方式。 這種方式最主要是為了要避免一個程式在運行中最容易出現的等待過程,即I/O的操作。 相對CPU來說,IO設備的速度是十分低落的,使用這種方式,能讓程式創建較少的執行 緒來完成較多的事。 最主要的不同點在於使用此方式系統會自動管理thread,自行建構,自行消滅。 我們不需要去管理thread的生命週期(類似ThreadPool),但更好的是連thread的休眠 系統都會幫我們掌控。 簡單說當需要等待時,thread會直接凍結住不占用資源,有需要時再喚醒。 而且我們還不需要自己去判斷什麼時候該休息,什麼時候不該。 --------------------------------------------------------------------------- 其實打到這裡我已經又開始迷糊了.......................... 以上幾乎都是我自己思考的結果,怕還是有錯誤 為了怕更誤導各位,我還是貼上一些參考文件讓各位看一下 如果說我的理解內容真的有錯誤,請各位提醒指點一下 最後我要問的問題就是,JAVA是否有命令來達到相同的功能。 參考文件 Programmer Club 論壇中對於thread即使用非同步方法的討論 http://ppt.cc/i6Lm 對岸的文件: .NET中非同步編程:傳統的非同步編程 http://ppt.cc/TL6k 對岸的文件: .NET中非同步編程:IO完成端口與BeginRead http://ppt.cc/Q6MO 網路上能查到相關的文件非常少(也有可能我GOOGLE的方式不對....) 因此比較多的是對岸的文件,如果有人不喜歡,深感抱歉。 -- 【微小說】我意外失明,女友不離不棄。後來,她遭遇車禍,臨終前把角膜捐給了我。 護士告訴我,女友離開的時候微笑著,讓我用她的眼睛代替她去好好看她眼中的世界。 我睜著剛複明的雙眼,淚如雨下。走上街頭,一切的一切都那麼熟悉,只是所有男人的 頭頂都多了一個字,要不是“攻”,要不是“受"。 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.173.114.237
1F:→ pico2k:google java asynchronous socket 04/28 20:11
2F:推 PsMonkey:我覺得重點是你的 ClientHandler 怎麼寫,或著更正確地說 04/28 21:07
3F:→ PsMonkey:你只是純粹懶得了解 Java IO、Socket 的運作機制..... 04/28 21:07
4F:→ cyclone350:這問題我大學寫程式時也遇到過,最後還是沒想到辦法 04/28 21:38
5F:→ cyclone350:結果寫類似MSN是用Thread,寫game是用loop看玩家動作 04/28 21:42
6F:→ cyclone350:我也想知道解答 04/28 21:49
7F:推 chchwy:我記得Java也有non-blocking IO,不需要每個人對應一個線程 04/28 21:55
8F:推 PsMonkey:那問題應該改成 InputStream 會不會 block 吧? 04/28 21:55
9F:→ PsMonkey:只能說還好我不碰 I/O 也不碰 thread [逃] 04/28 21:55
10F:→ tkcn:用 select? http://goo.gl/abpnA 04/28 22:02
11F:→ dou0228:Java Mina 或是 Netty 可以達到你要的 04/29 11:13







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP