“C/S架构系统应用过程中,会发生一个服务端程序服务众多客户端,用什么技术手段,提前解决服务阻塞问题的发生?”
曹志军意外地看着李洛,他不是在思考问题的答案,而是在惊讶他对‘编程’知识的认知程度,眼前这位十八九岁的小老板,根本就是个技术大佬,不然,怎么能知道着这种直达问题核心的技术难题。
“曹先生,你这么看着我做什么,这个问题应该不难吧!”李洛笑吟吟地看着直愣愣的曹志军,笑着问。
“这个问题不难解决,在服务器编程中有不少解决的方法,比:如多线程、多进程、复用IO,……等等。”曹志军缓过神来,摆正态度看着李洛,回答道。
“很好,那你能不说一说多线程怎么解决?在服务端accept和read都有阻塞程序!”李洛满意地一笑,接着问。
“嗯,解决思路是这样的,服务端同时处理多个客户端请求时,需要处理的情况有很多种,比如,新客户端等待与服务端建立连接,已连接客户端发送数据,已连接客户端断开连接等等情况,……,如果服务器采用轮询阻塞的方式运行,那么同一时刻只能处理一种情况,这时其他情况发生就要等待阻塞结束,……,可以通过锁,线程间通信,多个线程间同步等手段,实现分别处理工作,……。”曹志军思考了片刻,详细介绍道。
“这个模式可以解决,不过,用这种方式监听多个客户端,需要程序在用户态和内核态之间来回切换,浪费系统资源不说,客户端的请求也得不到及时的响应,当客户端数量增大时,查询效率直线下降,……,这个问题怎么解决?”李洛笑着点头,续集抛出一个问题。
认真听完李洛的提问,曹志军神情严峻,认真思考起来,再次感到对方的狠辣。
曹志军思考了十来分钟,不确定地回答:“使用多路复用技术,让内核阻塞监听每个客户端是否可读,……,达到减免用户态和内核态之间来回切换!”
李洛点了点头,赞同道:“不错的思路,不过,如果加入select的使用,你觉得怎么样,将服务端自身的socket也加入到select的监听列表中,当有新连接到达时,select会返回当前服务端socket处于活动状态,这时处理新连接即可,能避免多线程的挤压使用……,”
闻言,曹志军眼前一亮,忍不住赞叹道:“这个办法好,……。”
李洛微微一笑,看着兴奋的曹志军,再次抛出一个问题:“在系统使用过程中,server端会出现大量的假死连接,这个问题你是怎么解决的?”
曹志军眉头一皱认真思考起来,假死链接这个问题不常见,但是不能说没有/
c端可以断线重连s端,但是上一次的连接状态依然被s认为有效,并且得不到正确释放,……,具体造成的原因可以参考tcp/ip断开连接fin过程,如果觉得这种事发生的概率微不足道,不做任何处理,程序长时间运行后,会面临大量假死连接得不到正常释放,然后服务器越来越慢,IO处理效率越来越低。
这个问题怎么解决呢?
曹志军不由自主地陷入思考,抓着脑门,被这个问题难住了。
李洛笑呵呵地看着曹志军,有点喜欢他较真的性格,几次提问,已经能判断出曹志军的性格,而是不他的能力。
能力这种东西,后期通过努力的学习,都能获得提升,问题是个人的性格,能不能用心学习新技术,是否值得培养才是要不要招他的关键,曹志军目前为止的表现,还算合格。
“假死链接可以用两种方式解决,第一种,对连接上的套接字做保活处理,即设置keeplive,此后如果在规定时间内无数据传输,那么tcp协议栈会自动发送keeplive探测包,以维护当前连接有效性。”李洛笑着提醒,接着又道:“不过,这种解决方法有缺陷,会出现一些不可控的情况。”
“没错,如果在S端这样设置,c端会意外断电、网络会异常终止、或者被第三方软件或防火墙干掉。”曹志军眼睛一亮,补充道。
停顿了一下,曹志军迫切地看着李洛,关心地问:“第二种呢!”
“第二种,在c端定时发送用户层心跳包,s端针对每个已连接套接字记录最后一次收到心跳包的时间,同时开启线程定时检测:超过XX秒还未收到心跳包的套接字,kill掉,释放占用的上下文及收发缓冲区资源,……。”李洛笑着介绍。
“对啊!可以用这个方法,我怎么没想到!”曹志军恍然大悟,懊恼地说。
“可能这个问题比较偏,你一时没想到,我问个常见的吧!”李洛呵呵一笑,接着道。
“好!”曹志军兴奋地点头。
……
很快,李洛和曹志军,一个提问,一个回答,有时候,曹志军回答不出来的时候,李洛还会提个醒,原本一场面试的画风,骤然变成了一场学术交流会。
办公室里,还有第三人-陈晓雯,她就站在一旁,眼睁睁地看着,惊讶于李洛能跟曹志军聊的这么嗨,原本,她还担忧李洛压不住场子,要留下来帮忙的,那知会看到这副局面。
李总在IT知识领域,完全吊打曹志军啊!
陈晓雯双目放光,看着李洛就好像发现一个宝藏,藏着巨大的秘密。
然而,两个IT男兴致勃勃地讨论着技术问题,眼里没有陈晓雯的存在。
见他们两技术话题一个接着一个,一时半刻聊不完的样子,陈晓雯听不懂他们在说什么,默默退出办公室,顺手将玻璃门带上。
“晓雯姐,关门干嘛,我哥在里面有事忙吗?”陈晓雯刚把门关上,就见李晓芬兴冲冲朝跑来,脸上笑容灿烂,好像发生了什么值得开心的喜事。
“嗯!李总在面一个重要职位,一时半会儿,谈不下来。”陈晓雯解释了一下,好奇地看着李晓芬,问:“咋啦!发生了什么事!让你这么开心?”
“嘻!晓雯姐,我偷偷告诉你件事,你不要跟其他同事说哦!”李晓芬开心地点头,欣喜地将脑袋往陈晓雯身上凑过去。
陈晓雯眼中闪过一丝好奇,附耳倾听。