客户端:多线程使用单个SOCKET发数

qiang81020 2008-09-23 03:14:33
我现在的代码是,单个线程向服务器发送指令。使用短连接。既:建立SOCKET,发送一次报文,断开SOCKET。(事实证明此方法非常慢,而且占用端口太多)

现在我想改为:建立SOCKET,多线程发送N次报文(N>2W),断开SOCKET。

主要对JAVA不熟,不知道如何下手。:(

我的问题:
1.如果改为后种方式,那与:建立SOCKET,单线程发送2w次报文是否有区别,区别在哪里?
2.线程间是如何工作的?是排好队一个一个执行么?会不会这里执行一行,那边执行一行?很迷惑。

望高人指点。希望快速解决问题。
...全文
401 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
youzi530 2008-09-26
  • 打赏
  • 举报
回复
JF
ZXEOC 2008-09-26
  • 打赏
  • 举报
回复
我也建议你弄个缓冲区,然后专门弄个线程负责发送信息
rewafei 2008-09-26
  • 打赏
  • 举报
回复
呵呵,干嘛要断socket啊,发送后flush就行了,发送自然是多线程发送的不用把一条信息分段,你的网络程序自然是多线程管理交互数据的。就算多条线程同时发送信息你也不用考虑系统能不能发送的出去,系统不会发错地方的肯定也能发的出去。1m几k多条数据系统处理不来那机器就该扔了。还有broadcast用的方式还是for发送,因为到现在为止还没见过对大批量数据有更好的广播方式呢
sasgsc 2008-09-23
  • 打赏
  • 举报
回复
谁负责产生,谁负责发送,不好,因为产生一个字节也是产生,产生1M也是产生,销毁后再次初始化要消耗大量资源。如果说模式,我觉得应该用....呃....就象那个线程池一样的那个模式......就是一次初始化那么N个SOCKET,引用放在LIST里面,用的时候取,取的时候个数减一,用完了放回去,个数加一.........叫什么模式来着?..........
jacketl 2008-09-23
  • 打赏
  • 举报
回复
顶下,呵........
老紫竹 2008-09-23
  • 打赏
  • 举报
回复
麻烦,
方法1: 数据谁产生的,谁负责发送就行,不用考虑什么线程问题
方法2:看看生产者消费者模式。 数据产生视同生产者,数据发送视同消费者 参考这个 http://www.java2000.net/p581
taocaoren10000 2008-09-23
  • 打赏
  • 举报
回复
学习一下了
gaojava 2008-09-23
  • 打赏
  • 举报
回复
en,顶下
jsjlw 2008-09-23
  • 打赏
  • 举报
回复
数据谁产生的,谁负责发送就行,不用考虑什么线程问题

我觉得这句很好.
renmms 2008-09-23
  • 打赏
  • 举报
回复
学习
axman 2008-09-23
  • 打赏
  • 举报
回复
这要主看你每次发送的数据量是多少,如果建立一次连结只发送一个 hello,world,那太不合算了.

可以多个线程发送的内容往一个容器中扔,然后用几个线程专门负责发送,每个负责一个socket,这样模型比较清楚.

即使只需要一个socket发送,多个线程共同用一个socket发送虽然可以,但模型不清楚.
多个线程应该是共用一个接收发送信息的"产品容器"而不是共用socket,socket从这个容器中不断获取要发送的内容边续发送.


至于多长时间重建一次socket,这要看系统本身对socket的最大生命周期的限制,应该小于这个时间,建议最大存活期为30分钟.
总线程数不要超过cpu * 25.
亦风亦尘 2008-09-23
  • 打赏
  • 举报
回复
look
niuniu20008 2008-09-23
  • 打赏
  • 举报
回复
qiang81020 2008-09-23
  • 打赏
  • 举报
回复
我先试试看看。。。。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧