首页 > 作文

Socket结合线程池使用实现客户端和服务端通信demo

更新时间:2023-04-06 02:38:47 阅读: 评论:0

引导语

socket 面试最终题一般都是让你写一个简单的客户端和服务端通信的例子,本文就带大家一起来写这个 demo。

1、要求

可以使用 socket 和 rvicesocket 以及其它 api;

写一个客户端和服务端之间 tcp 通信的例子;

服务端处理任务需要异步处理;

因为服务端处理能力很弱,只能同时处理 5 个请求,当第六个请求到达服务器时,需要服务器返回明确的错误信息:服务器太忙了,请稍后重试~。

需求比较简单,唯一复杂的地方在于第四点,我们需网站推广的方式要对客户端的请求量进行控制,首先我们需要确认的是,我们是无法控制客户端发送的请求数的,所以我们只能从服务端进行改造,比如从服务端进行限流高一化学必修一第一章。

有的同学可能很快想到,我们应该使用 rversocket 的 backlog 的属性,把其设置成 5,但我们在上一章中说到 backlog 并不能准确代表限制的客户端连接数,而且我们还要求服务端返回具体的错误信息,即使 backlog 生效,也只会返回固定的错误信息,不是我们定制的错误信息。

我们好好想想,线程池似乎可以做这个事情,我们可以把线程池的 coresize 和 maxsize 都设置成回到唐朝当皇帝txt下载 4,把队列大小设置成 1,这样服务端每次收到请求后,会先判断一下线程池中的队列有没有数据,如果有的话,说明当前服务器已经马上就要处理第五个请求了,当前请求就是第六个请求,应该被拒绝。

正好线程池的加入也可以满足第三点,服务端的任务可以异步执行。

2、客户端代码

客户端的代码跑步机的十大品牌比较简单,直接向服务器请求数据即可,代码如下:

客户端代码中我们也用到了线程池,主要是为了并发模拟客户端一次性发送 6 个请求,按照预期服务端在处理第六个请求的时候,会返回特定的错误信息给客户端。

以上代码主要方法是 nd 方法,主要处理像服务端发送数据,并处理服务端的响应。

3、服务端代码

服务端的逻辑分成两个部分,第一部分是控制客户端的请求个数,当超过服务端的能力时,拒绝新的请求,当服务端能力可响应时,放入新的请求,第二部分是服务端任务的执行逻辑。

3.1、对客户端请求进行控制

我们使用 collectpoll.getqueue().size() >= 1 来判断目前服务端是否已经到达处理的极限了,如果队列中有一个任务正在排队,说明当前服务端已经超负荷运行了,新的请求应该拒绝掉,如果队列中没有数据,说明服务端还可以接受新的请求。

以上代码注释详细,就不累赘说了。

3.2、服务端任务的处理逻辑

服务端的处理逻辑比较简单,主要步骤是:从客户端的 socket 中读取输入,进行处理,把响应返回给客户端。

我们使用线程沉睡 2 秒来模拟服务端的处理逻辑,代码如下:

4、测试

测试的nz是哪个国家时候,我们必须先启动服务端,然后再启动客户端,首先我们启动服务端,打印日志如下:

接着我们启动客户端,打印日志如下:

我们最后看一下服务端的运行日志:

从以上运行结果中,我们可以看出得出的结果是符合我们预期的,服务端在请求高峰时,能够并发处理5个请求,其余请求可以用正确的提示进行拒绝。

5、总结

所以代码集中在 socketclient、socketrvicestart、socketrvice 中,启动的顺序为先启动 socketrvicestart,后运行 socketclient,感兴趣的同学可以自己 debug 下,加深印象。

以上就是socket结合线程池实现客户端和服务端通信实战demo的详细内容,更多关于socket线程池客户端与服务端通信demo的资料请关注www.887551.com其它相关文章!

本文发布于:2023-04-06 02:38:45,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/97e17081774632ecec127977f7b04fe5.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:Socket结合线程池使用实现客户端和服务端通信demo.doc

本文 PDF 下载地址:Socket结合线程池使用实现客户端和服务端通信demo.pdf

标签:服务端   客户端   线程   代码
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图