web服务器

php解决高并发问题

孤者浪人 提交于 2020-02-01 03:44:38
我们通常衡量一个Web系统的吞吐率的指标是QPS(Query Per Second,每秒处理请求数),解决每秒数万次的高并发场景,这个指标非常关键。举个例子,我们假设处理一个业务请求平均响应时间为100ms,同时,系统内有20台Apache的Web服务器,配置MaxClients为500个(表示Apache的最大连接数目)。 那么,我们的Web系统的理论峰值QPS为(理想化的计算方式): 20*500/0.1 = 100000 (10万QPS) 咦?我们的系统似乎很强大,1秒钟可以处理完10万的请求,5w/s的秒杀似乎是“纸老虎”哈。实际情况,当然没有这么理想。在高并发的实际场景下,机器都处于高负载的状态,在这个时候平均响应时间会被大大增加。 普通的一个p4的服务器每天最多能支持大约10万左右的IP,如果访问量超过10W那么需要专用的服务器才能解决,如果硬件不给力 软件怎么优化都是于事无补的。主要影响服务器的速度 有:网络-硬盘读写速度-内存大小-cpu处理速度。 就Web服务器而言,Apache打开了越多的连接进程,CPU需要处理的上下文切换也越多,额外增加了CPU的消耗,然后就直接导致平均响应时间增加。因此上述的MaxClient数目,要根据CPU、内存等硬件因素综合考虑,绝对不是越多越好。可以通过Apache自带的abench来测试一下,取一个合适的值。然后

tomcat是如何工作的

坚强是说给别人听的谎言 提交于 2020-01-30 07:26:36
1.WEB应用通信机制 1.1 WEB服务器 Web服务器也称为超文本传输协议(HTTP)服务器因为它使用HTTP与客户端(通常是Web浏览器)进行通信。 1.2 HTTP/1.1协议 HTTP简介 1.3 套接字通信 2.Tomcat组件 2.1 tomcat整体架构 来源: CSDN 作者: qq_26498709 链接: https://blog.csdn.net/qq_26498709/article/details/104105830

Node.js入门 ---构建一个Web程序

妖精的绣舞 提交于 2020-01-28 18:37:17
今天拜读了Manuel Kiessling大神的《Node入门》的博客,感觉收获很多,这篇文章非常适合有JavaScript基础和掌握了一门后台语言(Java,Python等)的想入门node的学习者。 文章循循善诱,一步一步升级知识,老外的文章很有思想,写的确实比国内的XX好的多。 这里我就开一篇博客记录一下。 什么是Node.js 1.中文网官方定义:Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效,包管理器 npm,是全球最大的开源库生态系统。 现在安装一些东西确实直接npm很方便。 2.JS以前一直只在浏览器前端上做一些交互性的操作,现在有了Node之后,它允许在后端(脱离浏览器环境)运行JavaScript代码。 要实现在后台运行JavaScript代码,代码需要先被解释然后正确的执行。Node.js的原理正是如此,它使用了Google的V8虚拟机(Google的Chrome浏览器使用的JavaScript执行环境),来解释和执行JavaScript代码。 3.除此之外,伴随着Node.js的还有许多有用的模块,它们可以简化很多重复的劳作,比如向终端输出字符串。 因此,Node.js事实上既是一个运行时环境,同时又是一个库。 一个完整的基于Node.js的web应用

python 创建简单web服务器笔记

◇◆丶佛笑我妖孽 提交于 2020-01-28 07:03:37
Python创建简单web服务器 步骤: 创建TCP服务端 1、导入套接字模块(socket) 2、创建套接字 3、设置地址重用 4、绑定端口 5、设置监听,让套接字由主动变为被动接收 6、接受客户端连接 定义函数 request_handler() 7、接收客户端浏览器发送的请求协议 8、判断协议是否为空 9、拼接响应的报文 10、发送响应报文 11、关闭操作 运行python web服务器 浏览器进行访问(我设置的端口号为8081) 即可展现如下图的hello world 定义主函数main() 1、导入套接字模块(socket) 2、创建套接字 import socket # 参数 # socket.AF_INET --- IPV4 # socket.SOCK_STREAM --- tcp tcp_server_socket = socket . socket ( socket . AF_INET , socket . SOCK_STREAM ) 3、设置地址重用 # 当前套接字 地址重用 值True tcp_server_socket . setsockopt ( socket . SOL_SOCKET , socket . SO_REUSEADDR , True ) 4、绑定端口 5、设置监听,让套接字由主动变为被动接收 tcp_server_socket . bind

eclipse中的Web项目自动部署到Tomcat

冷暖自知 提交于 2020-01-28 03:40:14
这里就有个问题,是怎么把Eclipse中的网站项目自动部署到tomcat中。在Eclipse中做的Web项目默认是不支持将项目发布到Web服务器上的,会发布到工作空间的某个目录,因此无法在外部启动Tomcat来运行Web项目,只有打开Eclipse中的服务器,才能运行Web项目。所以要对Eclipse进行修改,才能将做好的项目,发布到Tomcat服务器上,发布到服务器上的Webapps文件夹下。 在Eclipse中,默认会把Web项目放到Eclipse的工作空间下的.metadata\.plugins\org.eclipse.wst.server.core\tmp0(或者是tmp1)\wtpwebapps\下,如果现在Eclipse中有名为access的项目,将它按以前的方式部署到服务器上,则会在上边的目录下,看到自己的项目了,如图所示: 解决方法 1. 在Eclipse中的最底下的Servers视图,将所有部署的项目移除,如图所示: 2. 在该服务器上,单击鼠标右键选择“Open”,或在空白处按F3快捷键,或者是双击,打开如下的页面: 3. 在“Server Locations”处选择“Use Tomcat installation”,可以清楚的看到默认是“Use Workspace metadata”,即上边所说的目录。然后在Deploy的path处写上webapps即可

IDEA远程部署Web项目至远程Tomcat服务器

霸气de小男生 提交于 2020-01-26 23:43:58
写在前面 本文适合有一定基础的人阅读,因此本文的方法不一定适合所有人,请自行斟酌。 由于本人好吃懒做,不想手动把Web项目通过Xftp上传到服务器,因此上网查阅资料,在远程部署上浪费了太多时间却屡屡不成,偶然间看到一篇文章,恍然大悟,随后便部署成功了。因此写下这篇文章。 开始 服务器的准备工作 在Tomcat服务器所在文件夹的bin目录下,修改catalina.sh文件,添加如下文本 export CATALINA_OPTS = " - Dcom . sun . management . jmxremote - Dcom . sun . management . jmxremote . port = 1099 - Dcom . sun . management . jmxremote . ssl = false - Dcom . sun . management . jmxremote . authenticate = false - Djava . rmi . server . hostname = 66.166 .66 .60 " export JAVA_OPTS = " - Dcom . sun . management . jmxremote - Dcom . sun . management . jmxremote . port = 1099 - Dcom . sun .

Eclipse中的Web项目自动部署到Tomcat

半世苍凉 提交于 2020-01-26 20:25:06
原因 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的很快,但记忆总是很模糊,偶尔犯错,以前很少写博客,现在感觉还是很有必要的,编程中每个人对于犯过的错误,解决后不再使用的话,很长时间重新使用,还是会犯同样的错误。(这是人,编程环境,思维方式共同决定给的) 问题 这里就有个问题,是怎么把Eclipse中的网站项目自动部署到tomcat中。在Eclipse中做的Web项目默认是不支持将项目发布到Web服务器上的,会发布到工作空间的某个目录,因此无法在外部启动Tomcat来运行Web项目,只有打开Eclipse中的服务器,才能运行Web项目。所以要对Eclipse进行修改,才能将做好的项目,发布到Tomcat服务器上,发布到服务器上的Webapps文件夹下。 在Eclipse中,默认会把Web项目放到Eclipse的工作空间下的.metadata\.plugins\org.eclipse.wst.server.core\tmp0(或者是tmp1)\wtpwebapps\下,如果现在Eclipse中有名为access的项目,将它按以前的方式部署到服务器上,则会在上边的目录下,看到自己的项目了,如图所示: 解决方法 1. 在Eclipse中的最底下的Servers视图,将所有部署的项目移除,如图所示: 2. 在该服务器上,单击鼠标右键选择

关于HTTP的一些知识点

早过忘川 提交于 2020-01-26 10:33:10
一、HTTP协议概述 每天都有数以亿万计的JPEG图片、HTML页面、文本文件、MPEG电影、WAV音频文件、JAVA小程序和其他资源在因特网上。HTTP可以通过遍布全世界的web服务器上将这些信息快迅速、便捷、可靠的搬移到人们桌面上的web浏览器上去。web服务器所使用的是HTTP协议,因此被人称为HTTP服务器。 二、 HTTP/1.1与HTTP/1.0区别 1.缓存代理 2.带宽优化及网络连接的使用 3.错误通知的管理 4.消息在网络中的发送 5.互联网地址的维护 6.安全性及完整性 三、HTTP方法 GET:从服务端发送客服端命名资源 PUT:将来自客户端的数据存储到一个命名的资源中去 DELECT:从服务器删除一个命名资源 POST:将客户端数据发送到一个服务器网关程序 HEAD:仅发送网关命名资源响应中HTTP首部 四、HTTP的状态码 200 请求成功 301 请求资源永久移动到新位置 302 请求的资源临时从不同的URL响应 304 GET请求被允许,但文档未改变 400 语义有误,无法理解,参数有误 401 当前请求需要用户验证。 403 服务器已经理解请求,但拒绝执行 404 请求失败,资源未发现 408 请求超时 500 源代码有问题 502 坏的网关,作为网关或者代理工作的服务器,尝试执行请求时,从上游服务器,收到无效的响应 503 服务器临时维护或过载

基础概念PHP-FPM、FastCGI和CGI

寵の児 提交于 2020-01-26 02:42:40
在搭建 LAMP/LNMP 服务器时,会经常遇到 PHP-FPM、FastCGI和CGI 这几个概念。如果对它们一知半解,很难搭建出高性能的服务器。接下来我们就以图形方式,解释这些概念之间的关系。 基础 在整个网站架构中,Web Server(如Apache)只是内容的分发者。举个栗子,如果客户端请求的是 index.html,那么Web Server会去文件系统中找到这个文件,发送给浏览器,这里分发的是静态数据。 如果请求的是 index.php,根据配置文件,Web Server知道这个不是静态文件,需要去找 PHP 解析器来处理,那么他会把这个请求简单处理,然后交给PHP解析器。 当Web Server收到 index.php 这个请求后,会启动对应的 CGI 程序,这里就是PHP的解析器。接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以规定CGI规定的格式返回处理后的结果,退出进程,Web server再把结果返回给浏览器。这就是一个完整的动态PHP Web访问流程,接下来再引出这些概念,就好理解多了, CGI:是 Web Server 与 Web Application 之间数据交换的一种协议。 FastCGI:同 CGI,是一种通信协议,但比 CGI 在效率上做了一些优化。同样,SCGI 协议与 FastCGI 类似。 PHP-CGI:是

uwsgi/uWSGI/WSGI简介

十年热恋 提交于 2020-01-26 02:16:22
参考文章 uWSGI是一个 Web服务器 ,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。z WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。 uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。 uWSGI的作用:uWSGI 是一个全功能的 HTTP 服务器,他要做的就是把 HTTP 协议转化成语言支持的网络协议。比如把 HTTP 协议转化成 WSGI 协议,让 Python 可以直接使用。 uWSGI 我们知道 Flask 中自带了 web server,通过 Werkzeug,我们可以搭建 WSGI 服务,运行我们的网站,但 Flask 是 Web 框架,并不是 Web 服务器,尽管 Werkzeug 很强大,但只能用于开发,不能用于生产,对于 Web 服务器,我们有更专业的选择,那就是 uWSGI, uWSGI 是一个全站式的托管服务,它实现了应用服务器(支持多种编程语言)、代理、进程管理器、监视器。取名为 uWSGI 是因为它最早实现的是 Python 语言的 WSGI。 uWSGI 包括四个部分: uwsgi协议 web server