摘要: 上接 一个简单的Web服务器-支持静态资源请求,这个服务器可以处理静态资源的请求,那么如何处理Servlet请求的呢? 判断是否是Servlet请求 首先Web服务器需要判断当前请求是否是Servlet请求。 像Tomcat,通过解析HTTP报文拿到请求url后,就可以根据web.xml来查找是否有 阅读全文
posted @ 2019-06-09 23:22 Fudashi233 阅读(300) 评论(0) 推荐(0) 编辑
摘要: uptime 的作用 uptime一般用来查看机器当前的负载情况,如下所示。 [~]$ uptime 20:31:17 up 493 days, 2:30, 1 user, load average: 0.11, 0.13, 0.14 20:31:17:其展示了机器当前时间 up 493 days, 阅读全文
posted @ 2019-06-02 22:23 Fudashi233 阅读(495) 评论(0) 推荐(0) 编辑
摘要: 目标 实现一个简单的Web服务器,能够根据HTTP请求的URL响应对应的静态资源,如果静态资源不存在则响应404。 HttpServer 使用ServerSocket实现的一个服务器,request根据socket.getInputStream()获取HTTP报文,response将响应写入sock 阅读全文
posted @ 2019-05-12 23:10 Fudashi233 阅读(992) 评论(0) 推荐(0) 编辑
摘要: 上接《服务端线程模型-线程池服务模型》(https://www.cnblogs.com/fudashi233/p/10549221.html)。 这篇分享从最初的单线程服务模型一直演进到线程池服务模型,充分发挥出了现在多核CPU机器的优势,但是当面对万级别的qps时,仍然可能因为线程池打满而拒绝掉大 阅读全文
posted @ 2019-04-21 23:07 Fudashi233 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 缓存击穿 假设一个缓存系统中存在一个热Key,每分每秒都有大量的请求访问这个key,那么当这个热key因为过期而失效,一瞬间所有的请求直接打到DB上,这种场景称做缓存击穿。 为了避免这种问题业界一般有如下解决方案 1.互斥锁 当缓存过期时,常见的逻辑是直接请求DB,然后再set回缓存中。为了避免缓存 阅读全文
posted @ 2019-04-14 20:10 Fudashi233 阅读(688) 评论(2) 推荐(1) 编辑
摘要: rewind() rewind()方法将position置0,清除mark,它的作用在于为提取Buffer的有效数据做准备。 在#1处,rewind前和rewind后的示意图如下所示 > clear() clear()方法将position置0,清除mark,与rewind()方法不同的是,它还会将 阅读全文
posted @ 2019-03-24 22:13 Fudashi233 阅读(1187) 评论(0) 推荐(1) 编辑
摘要: 单线程服务器 初学网络编程时,我们写的服务端的代码大部分如下所示。 在一个循环中等待客户端请求,一旦接到请求就在当前线程与客户端进行通信,这就是单线程服务模型。 这种模型有个问题,就是当请求量一上来,同时第二步的操作耗时过长时,许多请求就会阻塞在系统的Socket队列中,无法及时得到处理,响应时间增 阅读全文
posted @ 2019-03-17 22:01 Fudashi233 阅读(963) 评论(1) 推荐(0) 编辑
摘要: 在网络编程中,Socket/ServerSocket有一些选项用来自定义一些行为,现在分享一下。 Socket选项 1.TCP_NODELAY 在Socket发送数据时,默认情况下,数据会先进入缓冲区,等缓冲区满了再发送出去,意图是为了通过减少传输数据的次数,以此来提高通信效率。 但是,对于一些需要 阅读全文
posted @ 2019-03-10 22:22 Fudashi233 阅读(738) 评论(0) 推荐(0) 编辑
摘要: 背景 Elasticsearch 不像关系型数据库,没有简易的 SQL 用来查询数据,只能通过调用 RESTful API 实现查询。大体上查询分为两种,基于 URL 的和基于请求主体的。基于 URL 的方式比较简单清晰,用得较多,在这简单记录下。 基本模式 基于 URL 的搜索请求基本模式如上图所 阅读全文
posted @ 2019-01-13 21:54 Fudashi233 阅读(2714) 评论(0) 推荐(0) 编辑