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缓存起来。
...全文
186 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/90fbf78c3289 "1元云购"是一种依托互联网的购物方式,用户仅需投入微小的资金(一般为一元)便有机会赢取高价值商品。此类模式常借助抽奖机制来判定获胜者,从而吸引众多用户加入。"1元云购源代码"是承载该业务流程的程序代码,其用途在于搭建一个完整的1元云购系统。 在构建1元云购源代码的过程中,主要包含以下几个核心技术要点: 1. **数据库架构**:为了有效存储商品详情、用户资料、交易历史及开奖结果,必须设计科学合理的数据库框架。这包括商品数据表、用户信息表、订单记录表和开奖记录表等,确保数据的统一性与完整性。 2. **支付渠道对接**:1元云购平台需与第三方支付服务(例如支付宝、微信支付)进行对接,以实现用户的在线支付操作。这涉及API接口调用、交易状态同步、退款流程管理等环节。 3. **随机数生成策略**:抽奖过程的核心在于公平透明地选定获奖者,通常采用随机数生成策略来实现。该策略需保障每位参与者拥有相等的获奖机会,同时防止欺诈行为。 4. **用户界面开发**:卓越的用户体验是吸引参与者的关键因素。前端页面应兼具视觉吸引力与操作便捷性,清晰展示商品信息、购买步骤、中奖规范等,并提供用户注册、登录、查询订单等功能。 5. **服务器程序设计**:后端系统负责处理用户请求,如管理订单、计算中奖号码、更新数据库信息等。这部分通常采用PHP等服务器端技术实现,需应对并发访问与高负载情形。 6. **安全措施**:1元云购平台可能面临恶意攻击,例如SQL注入、XSS跨站脚本攻击等。因此,源代码需遵循安全编程准则,对用户输入进行过滤与校验,同时运用HTTPS等加密手段保障数据传输安全。 7. **...

25,979

社区成员

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

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