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灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP