学习资料总结
- Linux IO模式及 select、poll、epoll详解
- LINUX I/O模式
- Socket编程基础
- 面试笔试基础知识一
- 面试笔试基础知识二
- Linux Socket编程(不限Linux)
- 利用Epoll实现Recator模式
常见问题集锦
(1)套接字对的含义
(2)套接字的工作过程(服务器端)
首先,服务器应用程序通过socket系统调用创建一个套接字,它是系统分配给该服务器进程的类似文件描述符的资源,不能与其他进程共享。其次,服务器进程使用bind系统调用给套接字命名。本地套接字的名字是linux文件系统的文件名,一般放在/tmp或者/usr/tmp目录下。网络套接字的名字是与客户相连接的特定网络有关的服务标识符。此标识符允许linux将进入的针对特定端口号的连接转到正确的服务器进程。接下来,服务器进程开始等待客户连接到这个命名套接字,调用listen创建一个等待队列以便存放来自客户的进入连接。最后,服务器通过accept系统调用来接受客户的连接。此时,会产生一个与原有的命名套接字不同的新套接字,它仅用于与这个特定的客户通信,而命名套接字则被保留下来继续处理来自其他客户的连接。
(3)套接字的工作过程(客户端)
- 调用socket创建一个未命名套接字,将服务器的命名套接字作为一个地址来调用connect与服务器建立连接。一旦建立了连接,就可以像使用底层文件描述符那样来用套接字进行双向的数据通信。
- CGI 服务程序流程:比如服务器接收到来自服务器的请求,它可以选择把请求传递给一个CGI程序,由它来根据请求生成内容,CGI程序把生成的内容返回给服务器,服务器再把这个内容返回给客户端。服务器程序只负责处理请求,不负责处理内容。任何编程语言都可以写cgi程序。
(4)web服务器、CGI、脚本语言php之间的关系
-
web服务器是用来接收HTTP请求并响应这个请求,web服务器所处理的内容都是静态的,要想处理动态内容,需要依赖于web应用程序,如php、jsp、python、perl。web server将动态的请求传递给这些应用程序所依赖的就是cgi协议。
-
客户端请求分两类,静态请求和动态请求。如果是静态请求,你用浏览器请求一个静态页面的服务器,它给你返回挂在服务器上的html文件;如果是动态请求,服务器使用重新开辟一个进程,使得运行在WEB服务器上的应用程序CGI处理动态请求(一个请求对应一个进程),CGI可以用任意服务端语言实现(常见的如C,C++等)。CGI返回结果通常都会包含一些HTML代码,浏览器接收到整个结果然后进行渲染,再由服务器返回给浏览器。总结:CGI就是服务器的编程接口用来处理动态请求。
-
PHP是在CGI基础上发展起来的,PHP这种可以将前后端进行分离的WEB开发语言,PHP代码只负责处理后台逻辑,将大量的HTML代码放在静态HTML文件中,浏览器最后渲染的结果是服务器返回的HTML代码加JS代码加CSS代码以及PHP模板输出的综合结果。
-
总结:通过cgi协议,再结合已搭建好的web应用程序,就可以让web server也能"处理"动态请求
-