`

http服务器的技术策略

阅读更多

最近研究了一下nodejs的异步编程,看到关于nodejs作为web前端接入服务器的好评不断,不由得想起了其他几种常用的web服务器的技术策略,所以在这里想做个横向对比,看看nodejs的接入速度到底快在哪里。

1》apache(多进程提高并发处理速度)

每个客户端的http请求,服务端都要启动一个进程,来进行整个业务处理

任务划分的粒度最粗,只能切分到到进程级

依靠操作系统的进程调度来分配各个进程的运行时间片

进程无法跨CPU,一个进程只能在一个CPU上运行,多个CPU的话,无法充分利用CPU资源

2》tomcat(多线程提高并发处理速度)

每个客户端的http请求,服务端都要启动一个线程,来进行整个业务处理

任务划分的粒度比较细,可以切分到到线程级

依靠java的线程调度机制来控制各个线程的运行时间片,可以充分利用CPU资源

3》nodejs(事件驱动的异步编程提高并发处理速度)

一个主线程,一个事件循环线程,多个异步调用处理线程,具体分工如下:

1)主线程负责监听端口,接入http请求,执行同步调用,对于异步调用,快速返回,把任务直接打包扔进队列,由后台的线程具体执行,然后由事件循环线程进行回调。相当于饭店的服务员,只负责接待顾客,点完菜下单扔给厨师

2)异步调用处理线程有多个,这些线程就是具体干活的厨师,根据单子炒菜就行了,它不需要知道具体是哪个顾客点的,炒完菜通知跑堂的端菜就可以了

3)事件循环线程就负责回调,就是跑堂端菜的,把炒完的菜端到指定的桌子上就可以了

由此可以看出:

每个客户端的http请求并没有一个固定的进程或者线程为他服务

多个异步调用处理线程,处理的单位只是具体的某个异步函数调用

任务划分的粒度最细,可以切分到函数级,所以可以最大限度地利用CPU资源

总结:

nodejs的接入速度快的原因在于,通过异步调用把线程的处理单位分割到函数级别,让各个线程马不停蹄地干活,打破一个请求对应一个进程或者线程的界限,让各个线程的稼动率达到最高,从而提高处理速度。

如果apache和tomcat服务器也能实现异步调用的话,每个进程或者线程内部也尽可能多的利用异步方法的话,同样也可以达到nodejs的接入速度

nodejs大量使用异步函数调用,导致多个异步调用之间的相互协作以及同步变得异常复杂,如果系统庞大到一定程度的话,代码的组织和可读性,以及可维护性会大大降低,也会使得复杂度提升,使得整个系统驾驭起来会越来越难,对开发者的要求也会提高。

如果用nodejs构筑比较庞大的系统的话,优良的开发框架显得异常重要,否则开发效率会大大降低,所以nodejs目前看来不适合构筑庞大的系统,至少现在是这样,除非有优良的开发框架作为支撑。

个人感觉nodejs够快,但不够强壮,毕竟是初出茅庐,很多方面还需要时间去提升和打磨。

分享到:
评论

相关推荐

    HTTP 服务器源代码

    本资料包中的“HTTP服务器源代码”可能包含了一个简单的HTTP服务器实现,可以用来理解HTTP协议的工作原理以及服务器端的编程技术。 一、HTTP服务器的基本结构 1. 请求解析:HTTP服务器首先接收到客户端的请求,然后...

    http服务器-windows

    在IT行业中,HTTP服务器是网络服务的核心组成部分,主要用于在互联网上分发超文本传输协议(HTTP)内容。在Windows操作系统环境下,本地搭建一个HTTP服务器能够方便地进行网站开发、测试和文件共享。以下是对"HTTP...

    快速建立HTTP服务器

    下面将详细介绍如何快速建立一个HTTP服务器,并探讨相关技术点。 1. **HTTP协议基础**: - HTTP是一个基于TCP/IP的无状态协议,用于传输超媒体文档,如HTML。 - 它定义了客户端和服务器之间通信的数据格式和行为...

    http.rar_C++ http服务器_HTTP 服务器_VC HTTP服务器_vc kingate_代理

    标签中的"c++_http服务器"、"http_服务器"和"vc__http服务器"都是对项目技术栈的强调,说明了服务器是用C++编程语言实现的,而"vc_kingate"可能是用于构建或增强HTTP服务器功能的一个库或框架。"代理"标签再次提醒...

    C/C++ 开发HTTP服务器

    在IT行业中,构建一个HTTP服务器是一项基础且重要的任务,尤其对于C/C++开发者来说,能够掌握这项技术将极大地提升其专业能力。本篇将详细探讨如何使用C/C++进行跨平台的HTTP服务器开发,主要关注Windows和Linux环境...

    服务器存储技术方案.pdf

    服务器存储技术方案涉及的概念非常广泛,包括各种存储架构、备份恢复技术、性能优化和监控策略等。根据提供的内容,下面详细介绍这些知识点: 1. UPS(不间断电源):服务器在运行过程中,突然断电可能会导致数据...

    Web系统服务器集群部署策略研究.pdf

    在Web开发领域,随着技术的发展和用户需求的增加,服务器集群部署策略显得越来越重要。本文主要探讨了如何通过优化Web系统架构来提升工作效率,特别是利用缓存技术构建服务器集群的方法。对于初学者来说,理解Web的...

    libevent 多线程 HTTP post服务器

    描述中提到的“libevent 多线程 HTTP post服务器”表明这是一个利用libevent库开发的服务端程序,该程序能够接收并处理来自客户端的HTTP POST请求,并且采用了多线程技术以实现并发处理,提升系统性能。这通常意味着...

    多线程HTTP服务器源代码.zip_ http服务器_HTTP 多线程_http服务器

    而多线程技术的应用,使得HTTP服务器能够更高效地处理并发请求,提升服务性能。本文将通过分析给定的"多线程HTTP服务器源代码.zip",探讨HTTP服务器的基本原理、多线程概念以及如何在实际代码中实现这些概念。 首先...

    服务器技术说明1

    【服务器技术说明1】 本文将深入探讨服务器技术,包括其结构、环境部署和主要功能,以帮助读者理解和掌握服务器在IT系统中的核心作用。 一、服务器结构 1. 多进程架构图 服务器通常采用多进程架构来提高系统的...

    图书:Nginx HTTP服务器

    《Nginx HTTP服务器》这本书深入探讨了Nginx这一高效、轻量级的Web服务器。Nginx以其反向代理、负载均衡和静态文件处理能力而闻名,被广泛应用于高性能网站架构中。以下是该书可能涉及的知识点,以及与之相关的IT...

    毕业答辩-http服务器的实现.rar

    让我们深入探讨HTTP服务器的工作原理以及可能涉及的技术和知识点。 1. HTTP协议:HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,用于从万维网服务器传输超文本到本地浏览器的传输协议。它是一个...

    Web服务器安全策略[参照].pdf

    Web 服务器安全策略 随着网络技术的普及和 Web 技术的不断完善,Web 服务已经成为互联网上颇为重要的服务形式之一。为了保护 Web 服务器不被恶意攻击和破坏,需要了解和识别它所面临的安全风险。本文将重点介绍 Web...

    VC++HTTP服务器

    总的来说,用VC++编写HTTP服务器涉及了网络编程、多线程、协议解析等多个方面,是一个综合性的项目,对于提升开发者的技术能力非常有益。在实践中,还可以探索更多高级特性,如HTTPS安全连接、负载均衡、缓存策略等...

    服务器端流媒体流行性的缓存策略研究.rar

    服务器端的流媒体缓存策略是优化服务质量、降低网络带宽消耗和提高用户体验的关键环节。本文将深入探讨服务器端流媒体流行性缓存策略的研究,旨在揭示如何有效地管理和利用缓存资源,以满足大规模用户的并发需求。 ...

    服服务器推送技术服服务器推送技术.doc

    服务器推送技术是Web开发中的一种重要机制,旨在克服传统HTTP协议的局限性,尤其是解决服务器向客户端实时推送信息的问题。这种技术在Ajax兴起后变得更加重要,因为它弥补了Ajax在服务器主动推送消息方面的不足。 ...

    服务器推技术,最新聊天室技术

    它与传统的HTTP请求-响应模型不同,服务器推技术允许服务器主动地将数据发送到客户端,而无需客户端发起新的请求。这一机制极大地提高了实时性和用户体验。 一、服务器推技术 1. 长轮询(Long Polling):长轮询是...

    linux 服务器集群与负载均衡技术

    Linux服务器集群与负载均衡技术是构建高可用性、高性能计算环境的关键技术,广泛应用于大型网站、企业级应用和云计算服务中。本节将深入探讨这一主题,解析其核心概念、架构设计以及实施策略。 首先,我们需要理解...

    VC++开发http服务器程序

    此外,你还可以参考开源的HTTP服务器项目,如Apache或Nginx的源代码,来获取更高级的实现策略和最佳实践。 总的来说,开发一个VC++ HTTP服务器程序涉及网络编程、HTTP协议理解和Winsock库的使用。通过实践,你可以...

    服务器推送技术

    服务器推送技术是网络应用中的一种通信模式,它与传统的客户端请求、服务器响应的HTTP协议不同。在传统的HTTP模型中,客户端(通常是浏览器)发起请求,服务器接收到请求后返回相应数据。然而,服务器推送技术允许...

Global site tag (gtag.js) - Google Analytics