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缓存起来。
...全文
170 1 打赏 收藏 转发到动态 举报
写回复
用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解决了 就没问题了
代码下载链接: https://pan.quark.cn/s/90052d681b2f 本书系统地阐述了利用C语言进行程序开发的各种方法与技巧,全书总共分为十二个章节,涵盖了从基础到高级的多个方面,包括但不限于基础知识、指针运用、数据结构、算法设计、数学运算、文件处理、库函数应用、图形图像生成、系统调用、加密与安全机制、游戏开发以及综合案例等。整个书籍精心设计了三百个实例,每个实例都着重展示了其在实际应用中的价值。本书既适合作为C语言编程的入门教材供初学者研习,也能够为程序开发者、相关专业培训机构的教师和学生提供参考和借鉴。第一章聚焦于基础知识,详细介绍了进制转换、条件判断、多重循环图形打印、循环的数学应用、数组操作、字符与字符串处理、函数使用、趣味计算、宏定义与位运算等内容。第二章深入探讨了指针的相关知识,包括指针变量、指针与数组的关系、指针与函数的交互、字符串与指针的结合以及指向指针的指针运用。第三章着重于数据结构的学习,涵盖了结构体、链表、栈与队列、串与广义表、二叉树以及图及其应用等多个重要主题。第四章详细介绍了算法设计,涉及简单问题求解算法、排序算法、查找算法、数学定理与猜想以及逻辑推理与判断等内容。第五章围绕数学应用展开,讨论了素数问题、整数趣题、数学问题求解、矩阵运算以及生活中的数学实例。第六章专门讲解文件操作,包括了文件读写操作、文件内容处理、文件的创建与查找删除、以及文件相关操作等。第七章介绍了库函数的调用,涵盖了时间转换与操作函数、数学函数、字符串与字符函数以及其他各类函数的使用方法。第八章则聚焦于图形图像的处理,详细介绍了基本图形的绘制、色彩填充与使用技巧等。

25,980

社区成员

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

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