当前位置:  技术问答>linux和unix

面试题,socket进行send操作始终send不出去该怎么办?

    来源: 互联网  发布时间:2017-03-07

    本文导语:  我的回答是,在应用层弄一个缓冲区,先把数据放入这个缓冲区,再从这个缓冲区写入socket。每次当socket可写时就从这个缓冲区里取走并发出,如果应用层的缓冲区满了就设置一个定时器,比如一分钟,如果定时器超...

我的回答是,在应用层弄一个缓冲区,先把数据放入这个缓冲区,再从这个缓冲区写入socket。每次当socket可写时就从这个缓冲区里取走并发出,如果应用层的缓冲区满了就设置一个定时器,比如一分钟,如果定时器超时后应用层缓冲区还是满的,就断开链接。

感觉我的回答对方并不满意,而且好多次都被这么问到,请问各位大牛,有更好的解决办法么?

|
是啊, 我再读一遍发现你就这个意思.

再多的灵活设计, 比如Buffer堆积过多就暂时不处理请求(取消读事件或者忽略之), 这样可以避免请求堆积造成应答Buffer不停的增长.

具体点, 比如绝大多数Web服务器基于状态机实现, 一个典型的场景比如:

5个请求一次性读入req buffer, 此前状态为等待请求状态, 基于状态机的服务器实现一般将5个请求一次性解析出来放入req list,随之进入处理请求状态, 状态机从req list取得一个req处理并response, 检查仍有剩余req则递归进入请求处理状态, 继续获取一个req, 如此递归直到req list取空则进入等待请求状态。 中间任何一个req的response堆积res buffer过长都可以保持req仍留存在list中并保证注册write事件(可能之前已经因未写出注册过)从而进入停止请求状态。 在今后write事件触发后,检查到如果是停止请求状态(如前一个括号所说,可能不在此状态),那么除了将堆积buffer写出外,还需检查堆积buffer是否允许继续堆积,如果是则设置处理请求状态,递归调用状态机处理。

经验很重要,多看点开源服务器实现,多写点代码就懂了。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 各位朋友,小弟过两天要到创智去面试了,这是我头一次去参加面试,不知道要问些什么问题,请大家多提点,提点。
  • 高分求进外企面试时的英语面谈经历
  • linux内核与驱动面试
  • 面试过linux c的进来
  • 去建行面试应该注意些什么?帮帮我!
  • Unix/Linux下的开发经验,谁有这方面面试题.
  • 急!!! Java面试时的一个排列组合问题
  • 一家月薪上万的外企的面试题(Linux C工程師)
  • ### java面试问题集 ###
  • 请你展望一下软件技术未来的发展?(面试题)
  • 用UNIX/Linux开发的公司,面试都问些啥????
  • 哪位大哥知道浙大兰德怎么样?面试会试些什么呀?
  • 哪位大哥知道杭州CSK公司怎么样?面试会试些什么呀? 薪水大概多少?急!!谢谢!!
  • 急:我要去面试,大家给指点一下(在线等)
  • 谁有腾讯面试题目,请提供以下,谢谢~其他的也可以,谢谢~
  • H3C面试问题
  • Linux平台下的面试~~~
  • 关于招聘面试
  • 笔试和面试时回答不出具体服务的配置怎么办?有些Linux服务都是看书才会做的。
  • 这个面试题该怎么回答啊?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3