socket池流关闭的问题

weinianjie1 2016-04-06 01:29:45
我写了个连接池,用list保存长连接socket对象,请求过来的时候会从list中获取socket的,然后获取流,用这个流处理业务

Socket socket = list.remove(0);// 从池子中获取socket

OutputStream os = socket.getOutputStream();
os.write("xxxxxxxxxx");// 处理业务
os.flush();

list.add(socket);// socket还回去

1.os我不能关闭啊,要是关闭了第二次拿的时候会提示socket已经被关闭。(直接关闭流会导致socket关闭已经确认,网络也有文章说明)
2.如果放之不理,虽然每次都能打开流也能实现读写,但是会有很多os对象驻留内存中,怕高并发下有内存泄漏。
3.socket的shutdowOutpunt也试过了,虽然不会导致socket关闭,但是第二次getOutputStream用来处理业务的时候就报错了,提示已经shutdown。
4.这里暂不讨论nio的情况,如果是普通io能实现我想要的功能么?或者是莫非把流对象也用map缓存起来。
...全文
123 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianfang 2016-04-06
  • 打赏
  • 举报
回复
1.os我不能关闭啊,要是关闭了第二次拿的时候会提示socket已经被关闭。(直接关闭流会导致socket关闭已经确认,网络也有文章说明) 对 2.如果放之不理,虽然每次都能打开流也能实现读写,但是会有很多os对象驻留内存中,怕高并发下有内存泄漏。 不会,没有创建新os,或者你直接这么写 socket.getOutputStream().write("xxxxxxxxxx"); socket.getOutputStream().flush(); 3.socket的shutdowOutpunt也试过了,虽然不会导致socket关闭,但是第二次getOutputStream用来处理业务的时候就报错了,提示已经shutdown。 4.这里暂不讨论nio的情况,如果是普通io能实现我想要的功能么?或者是莫非把流对象也用map缓存起来。 问题2解决了 就没问题了

25,980

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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