当前位置: 首页 > news >正文

百度如何建设自己的网站wordpress首页添加音乐

百度如何建设自己的网站,wordpress首页添加音乐,广州网站seo推广,百度快照推广效果怎样1 Web 相关 get 和 post 区别 get#xff1a; 请求数据在 URL 末尾#xff0c;URL 长度有限制 请求幂等#xff0c;即无论请求多少次#xff0c;服务器响应始终相同#xff0c;这是因为 get 至少获取资源#xff0c;而不修改资源 可以被浏览器缓存#xff0c;以便以后…1 Web 相关 get 和 post 区别 get 请求数据在 URL 末尾URL 长度有限制 请求幂等即无论请求多少次服务器响应始终相同这是因为 get 至少获取资源而不修改资源 可以被浏览器缓存以便以后的请求中更快地获取相同资源 可以在浏览器中输入或作为超链接点击 post 参数在请求体中可以传递更多数据 不幂等因为通常需要修改或创建资源 无法被浏览器缓存因为可能会修改服务器资源 请求必须通过表单或 js 发送 cookies 和 session 的区别cookie 的安全性 都是用于 web 开发中用于跟踪用户状态的技术区别如下 存储位置Cookie 存储在客户端浏览器小文件中Session 是存储在服务器端的内存或数据库中 存储内容Cookie 中存储的是客户端的一些状态信息例如用户的登录状态、语言偏好等而 Session 中存储的是服务器端保存的用户状态信息例如用户 ID、购物车内容等。 安全性Cookie 因为存储在浏览器容易被攻击Session 存储在服务器端安全性更高 有效期Cookie 可以设置一个过期时间当超过这个时间后Cookie 将自动失效而 Session 可以根据需要设置过期时间或者在用户关闭浏览器时自动过期 综上所述Cookie 和 Session 都是用于跟踪用户状态的技术但存储位置、存储内容、安全性和有效期等方面有所不同。在实际开发中应该根据具体需求选择合适的技术。例如对于需要跨多个页面和多个设备保存用户状态的应用程序应该使用 Cookie而对于需要保存更多用户状态信息和更高安全性要求的应用程序应该使用 Session。 jwt token 和 session 的区别 JWT (JSON Web Token) 和 Session 都是用于认证和授权的技术它们之间的区别如下 数据存储Session 是在服务器端存储用户状态信息的一种方式通常使用内存或数据库来存储 Session 数据而 JWT 是一种无状态的认证方式Token 数据是通过编码后存储在客户端的 Cookie 或 LocalStorage 中服务器不会存储 Token 数据。 跨域支持由于 Session 是基于 Cookie 实现的因此在跨域请求时需要特殊处理而 JWT 则可以在不同域名之间共享因为 Token 数据是存储在客户端的。 扩展性JWT 可以扩展为不同的认证方式例如基于 OAuth 的认证方式而 Session 的扩展性相对较弱需要在服务器端进行实现。 安全性使用 Session 进行认证时需要确保 Session ID 的安全否则可能会被攻击者盗取而使用 JWT 进行认证时可以使用加密算法对 Token 数据进行加密提高安全性。 无状态性由于 JWT 是无状态的因此可以避免服务器端的负载问题特别适合于分布式系统和微服务架构。 总的来说JWT 适合于分布式系统和无状态应用而 Session 适合于传统的 Web 应用。使用哪种方式取决于具体的需求和应用场景。 docker 镜像和容器的区别 Docker是一种用于构建和管理应用程序的开源平台。在Docker中镜像和容器是两个重要的概念。 Docker镜像是应用程序的打包和分发方式。它包含了应用程序所需的所有文件、配置和依赖项可以看作是一个轻量级的虚拟机模板。Docker镜像是只读的一旦创建就不能更改。镜像通常是由Dockerfile文件定义的Dockerfile文件是一种文本文件用于指定构建Docker镜像所需的所有步骤。 Docker容器是Docker镜像的运行实例。容器是可运行的、独立的应用程序单元可以在任何支持Docker的环境中运行。Docker容器是基于Docker镜像创建的并且可以动态修改和更新容器中的应用程序和配置。容器可以启动、停止、暂停、恢复和删除。 可以将Docker镜像看作是应用程序的打包和分发方式而Docker容器是应用程序的运行实例。在使用Docker时通常首先构建一个Docker镜像然后在Docker镜像的基础上创建多个Docker容器。这种分离的方式使得开发、测试、部署和运维过程更加高效、可靠和可重复。 输入一个网址在浏览器的完整过程越详细越好 解析URLUniform Resource Locator统一资源定位符。 URL是指定网络资源的地址。URL由多个部分组成例如协议例如http或https、主机名例如www.example.com、端口号、路径和查询字符串。浏览器会解析URL以确定要访问的主机名和路径。 建立TCP连接。浏览器会使用HTTPHyperText Transfer Protocol超文本传输协议或HTTPSHTTP SecureHTTPS是一种加密的HTTP协议与Web服务器建立TCP连接。如果使用的是HTTPS则还需要进行SSL/TLS握手以建立安全连接。 发送HTTP请求。一旦TCP连接建立浏览器会向Web服务器发送HTTP请求。请求中包括HTTP方法例如GET或POST、资源路径、HTTP版本、请求标头和消息正文对于某些请求例如POST请求。 接收HTTP响应。Web服务器将处理HTTP请求并生成HTTP响应。响应包括HTTP状态码、响应标头和响应正文。常见的HTTP状态码包括200 OK请求成功、404 Not Found资源未找到和500 Internal Server Error服务器内部错误。 处理响应。一旦浏览器接收到HTTP响应它会解析响应并执行以下操作 如果响应状态码为200则解析响应正文并显示网页内容。 如果响应状态码为3xx则浏览器将遵循响应中指定的重定向URL以获取重定向后的资源。 如果响应状态码为4xx或5xx则浏览器将显示适当的错误页面。 渲染页面。浏览器会将HTML、CSS和JavaScript代码解析为可视化页面并在屏幕上呈现出来。页面可能包括文本、图像、视频和其他媒体元素。 关闭TCP连接。一旦页面渲染完毕浏览器会关闭TCP连接。 什么是 MVC 模型、视图、控制器解耦数据 M(Model模型负责业务对象和数据库的交互ORM V(View视图负责与用户的交互展示 CControl控制器接收请求参数调用模型和视图完成请求 ORM ORMObject Relational Mapping对象关系映射用于实现业务对象与数据表中的字段映射。比较出名的软件有Sqlalchemy、Django ORM、Peewee Web 框架对比 Django、flask、Fastapi、tornado Django高度集成的 Web 框架适合开发复杂的 Web 应用程序提供了大量的自带模块和插件如ORM、模板引擎、表单处理、认证等非常适合快速搭建全功能的 Web 应用程序。但是自由度控制较少有一定的学习曲线。 Flask是一个轻量级的 Web 框架比 Django 更为灵活适合快速搭建小型的 Web 应用程序。提供了基本功能如路由、请求响应、模板引擎等可通过插件来拓展功能。具有更高的自由度但需要更多的手动配置和开发 FastAPIFastAPI 是一个新兴的 Web 框架以性能高和易用性强著称。FastAPI 基于 Python 3.7 的类型注解和异步编程模型具有自动生成 API 文档、自动验证输入和输出数据等优秀特性。FastAPI 在处理高并发请求和异步 IO 方面表现出色是构建高性能 Web 应用的不二之选。 TornadoTornado 是一个异步 Web 框架特别适合处理大量的并发请求和实时流数据。Tornado 提供了基于协程的异步编程模型其核心特性是非阻塞 IO 和事件驱动比较适合构建长连接的 Web 应用程序如聊天应用、实时推送等。 综上所述选择哪个 Web 框架应该根据具体的应用场景和需求而定。如果需要开发高度集成、复杂的 Web 应用程序可以选择 Django如果需要开发轻量级、灵活的 Web 应用程序可以选择 Flask如果需要开发高性能的 Web 应用程序可以选择 FastAPI 或 Tornado。 什么是 wsgi WSGIWeb Server Gateway Interface是 Python Web 应用程序和 Web 服务器之间的标准接口它定义了 Web 服务器如何与 Python 应用程序进行通信。WSGI 规范主要包括两部分服务器和应用程序之间的环境和通信协议。WSGI 的主要作用是为 Python Web 应用程序和 Web 服务器提供了一个标准的接口让开发者可以使用不同的 Web 服务器来部署和运行他们的应用程序同时也提高了 Web 应用程序的可移植性。 2 Django 框架 Django 中间件的使用场景是什么 是在请求和响应过程中位于视图函数前后的一系列可重用的组件可用于拦截请求和响应进行一些处理或修改并将请求传递给下一个中间件或视图函数应用场景 认证和授权验证是否登录或是否有权限访问特定页面 日志记录记录请求和响应详细信息包括请求时间、响应时间请求方法、路径、响应状态码等以便于调试和监控 缓存提高网站性能和响应速度 异常处理捕获视图函数中的异常如发送邮件通知管理员等 Django 请求生命周期 wsgi 获取解析 HTTP 请求并转发给 Web 框架 中间件对请求进行校验或在请求对象中添加其他相关数据如csrf、request、session 路由匹配根据请求 URL 去匹配不同的视图函数 视图函数在视图函数中进行业务逻辑的出来涉及到orm、templates 渲染 中间件对响应的数据进行处理 wsgi将响应的内容发送给浏览器 Django 内置组件 Admin对 model 中对应的数据表进行增删改查提供的组件 model负责操作数据库 form 组件生成 HTML 片段对数据有效性进行校验 ModelForm用于数据库操作也可以用于用户请求的验证 列举 Django 中间件的 5 个方法及应用场景 process_request请求进来时权限验证 process_view路由匹配之后能够得到视图函数 process_exception异常时执行 process_template_response模板渲染时执行 process_response请求有响应时执行 以上方法的返回值可以是 None或者是一个HttpResponse对象如果是 None则继续按照django定义的规则向后继续执行如果是 HttpResponse 对象则直接将改对象返回给用户。 Django 的 request 对象是在什么时候创建的 class WSGIHandler(base.BaseHandler):request self.request_class(environ) 请求到 WSGIHandler 类的时候执行 __cell__ 方法将 environ 封装成 request。 如何给 CBV 添加装饰器 # 引入 method_decorator 模块 ​ # 1. 直接给类加装饰器所以请求方法get、post 等 method_decorator(test, namedispatch) class LoginView(View):pass ​ # 2. 单独给请求的函数添加装饰器 method_decorator def post(self, request, *args, **kwargs):pass Django 如何实现 csrf 只对 post 请求进行 csrf 防御第一次请求时会在服务端随机产生一个 token把这个 token 放到 cookie 中然后每次 post 请求都会携带这个 token这样就能避免 csrf 攻击了。 Django 中如何实现单元测试 使用 untest 模块coverage 生成测试覆盖度报告。 简述 MVC 和 MTV MVCModel View Controller模型-视图-控制器是一种 Web 架构模式。特点把业务逻辑、模型数据、用户界面分离开来让开发者将数据与表现解耦 Model模型数据库层面 View视图系统中选择显示什么和如何显示的部分 Controller系统中根据用户输入并视需要访问模型以决定使用哪个视图的那部分 MTVModel Templates View模型-模板-视图 Model数据存取层处理与数据所以事务操作数据模型如何读取数据等 Templates表现层将模型中的数据通过页面的形式展示给用户 View业务逻辑层包含存取模型以及调取恰当模板的相关逻辑如从模板中获取用户输入写入模型中从模型中读取数据放到模板中显示灯。 简述什么是FBV和CBV FBV和CBV本质是一样的基于函数的视图叫做FBV基于类的视图叫做CBV使用 CBV 的优点 提高了代码的复用性可以使用面向对象的技术比如Mixin多继承 可以用不同的函数针对不同的HTTP方法处理而不是通过很多if判断提高代码可读性 Django本身提供了runserver为什么不能用来部署(runserver与uWSGI的区别) runserver方法是调试 Django 时经常用到的运行方式它使用Django自带的 WSGI Server 运行主要在测试和开发中使用并且 runserver 开启的方式也是单进程 。 uWSGI是一个Web服务器它实现了WSGI协议、uwsgi、http 等协议。注意uwsgi是一种通信协议而uWSGI是实现uwsgi协议和WSGI协议的 Web 服务器。uWSGI具有超快的性能、低内存占用和多app管理等优点并且搭配着Nginx就是一个生产环境了能够将用户访问请求与应用 app 隔离开实现真正的部署 。相比来讲支持的并发量更高方便管理多进程发挥多核的优势提升性能。 Django如何实现websocket Django-channels 模块 Django 是 MVC 还是 MTV 模式 Django采用了类似于MVC的设计模式但是由于模板层的引入所以Django更常用的被称作MTV即Model-Template-View。其中 Model负责业务对象和数据库的关系映射ORM。 Template负责如何把页面展示给用户(html)。 View负责业务逻辑并在适当时候调用Model和Template。 3. Flask 框架 Flask 上下文 在 Flask 中有两种上下文应用上下文和请求上下文。应用上下文包含了应用的全局状态而请求上下文则包含了关于当前请求的信息。 1、应用上下文 在 Flask 中应用上下文对象用于存储应用的全局状态例如配置、插件、请求钩子等。应用上下文在应用启动时创建并在应用关闭时销毁。在同一个线程中应用上下文是共享的可以使用 current_app 全局变量来访问应用上下文对象。 2、请求上下文 在 Flask 中请求上下文对象用于存储关于当前请求的信息例如请求头、请求方法、URL 等。请求上下文对象在每个请求开始时创建并在请求结束时销毁。在同一个线程中请求上下文是独立的可以使用 request 全局变量来访问请求上下文对象。 应用上下文和请求上下文可以使用 Flask 的 app_context() 和request_context() 函数进行手动创建也可以使用 Flask 提供的 app 和 request 全局变量来隐式访问上下文对象。在使用 Flask 的扩展时通常会隐式地使用上下文对象因此开发者不需要手动创建。 下面是一个使用 Flask 上下文的简单示例 from flask import Flask, request, current_app ​ app Flask(__name__) ​ app.route(/) def hello_world():# 访问应用上下文对象print(current_app.name) ​# 访问请求上下文对象print(request.method)print(request.url)print(request.headers) ​return Hello, World! Flask 中请求钩子的理解和应用 Flask 中的请求钩子是一种机制用于在请求的不同阶段执行特定的操作。在 Flask 中请求钩子主要有两种类型before_request 和 after_request。 before_request 钩子会在每个请求处理之前被调用可以用来执行一些全局操作比如验证用户的登录状态、设置一些全局变量等。 在 before_request 钩子中可以通过返回 None 或一个 Response 对象来控制请求的继续处理或提前结束。如果返回 None则请求会继续向下执行而如果返回一个 Response 对象则会提前结束请求处理并返回该 Response 对象。 after_request 钩子会在每个请求处理结束之后被调用可以用来执行一些请求结束后的全局操作比如关闭数据库连接、设置一些响应头等。在 after_request 钩子中可以修改响应对象并返回它也可以返回原始的响应对象或一个新的 Response 对象。 下面是一个简单的例子展示了如何使用 before_request 钩子来验证用户的登录状态 from flask import Flask, request, abort ​ app Flask(__name__) ​ app.before_request def check_login():if request.path ! /login and not request.args.get(token):abort(401, Unauthorized) ​ app.route(/login) def login():token generate_token() # 生成登录 tokenreturn {token: token} ​ app.route(/data) def get_data():# 获取数据return {data: data} ​ if __name__ __main__:app.run() 上面的每个请求都会先经过 check_login() 函数验证是否登录你也可以给不用验证的请求加白名单。 对 Flask 蓝图(Blueprint)的理解 Flask 蓝图Blueprint是一种组织 Flask 应用的方式它可以将应用拆分为一系列小的应用组件从而使应用更加模块化和易于管理。蓝图可以包含一组相关的路由、模板、静态文件、错误处理等应用组件并可以被注册到 Flask 应用中。在一个 Flask 应用中可以同时注册多个蓝图它们之间相互独立可以共同组成一个完整的应用。 Flask 蓝图的主要作用有以下几点 模块化应用通过将应用拆分为多个蓝图可以将不同功能的代码分开组织从而提高应用的可读性和可维护性。 组合多个应用多个蓝图可以在一个 Flask 应用中并存从而形成一个完整的应用这样可以更灵活地组合多个应用。 分离功能蓝图可以让你将不同功能的代码分离开来这样可以更好地重用代码、测试代码和独立部署不同功能的应用。 分离权限蓝图可以用来隔离不同权限的用户从而更好地控制用户访问不同的功能。 使用 Flask 蓝图的基本步骤如下 创建一个蓝图对象使用 Flask 的 Blueprint 类创建一个蓝图对象可以指定蓝图的名称、导入名称、静态文件夹、模板文件夹等属性。 注册路由和视图函数在蓝图对象上使用装饰器注册路由和视图函数与 Flask 应用中的路由和视图函数注册方式相同。 注册蓝图在 Flask 应用对象上使用 register_blueprint() 方法注册蓝图对象可以指定蓝图对象的 URL 前缀、子域名等属性。 下面是一个简单的 Flask 蓝图的例子 from flask import Blueprint ​ bp Blueprint(auth, __name__, url_prefix/auth) ​ bp.route(/login) def login():return Login page ​ bp.route(/logout) def logout():return Logout page Flask 常用第三方组件 Flask-WTF表单处理组件提供了 CSRF 保护、表单验证等功能 Flask-Login用户认证组件提供了登录、注销等功能 Flask-Mail邮件发送组件可以方便地集成到应用中发送邮件 Flask-RESTfulRESTful API 开发组件提供了路由、参数解析、错误处理等功能 Flask-SQLAlchemy数据库 ORM 组件支持多种关系型数据库提供了简单易用的查询接口 Flask-Caching缓存组件支持多种缓存类型提供了简单的接口 Flask-Admin后台管理组件提供了 CRUD 操作、搜索、过滤等功能 Flask-Uploads文件上传组件支持多种存储方式提供了上传验证、文件处理等功能 Flask-Migrate数据库迁移组件可以方便地管理数据库结构的变更。 Web 安全 sql 注入 通过特殊的输入参数传入 web 应用导致后端执行了恶意的 sql 语句 通常由于程序员未对输入进行过滤直接动态拼接 sql 产生 可以使用开源工具 sqlmap、sqlninja 检测 如何防范 永远不要相信用户的输入 对输入参数做好检查类型和范围过滤和转义字符 不要拼接 sql使用占位符或者 ORM 可以大大降低 sql 注入的风险 数据层做好权限管理配置不要明文存储存储信息 # sql 语句拼接不推荐 sql select * from users where name name and passwordmd5(password) ​ # SQL 语句注入--- 将后面的 SQL语句注释掉从而到达不需要输入密码就能取出数据的目的 rose -- ​ # 使用占位符 sql select * from users where name%s and passwordmd5(%s) xss 跨站脚本攻击 恶意用户将代码植入到提供给其他用户使用的页面中未经转义的恶意代码输出到其他用户浏览器被执行 用户浏览的页面被恶意植入 JS 语句其他用户访问同一个页面时JS文件被执行从而到达攻击用户的目的。 主要分为两类反射型非持久型放 url 中发给用户诱惑用户点击存储型持久型 危害盗取用户 cookie获取敏感信息 如何防范 过滤用户输入的特殊字符如script、、 等 bs4 BeautifulSoup(article_content, html.parser) ​ # 过滤 script、link 标签 for tag in bs4.find_all():if tag.name in [script, link]:tag.decompose() # 删除 csrf 跨站请求伪造 CSRFCross-Site Request Forgery也称为“跨站请求伪造”是一种常见的网络攻击方式攻击者利用用户在已登录的网站上的身份信息发送一个伪造的请求以达到攻击者的目的。 攻击者通常使用各种方式来诱导用户访问一个特定的网站或点击一个特定的链接当用户在登录状态下访问该站点或点击该链接时攻击者就可以利用用户的身份信息发送一个伪造的请求。这样攻击者就可以在用户不知情的情况下执行一些非法操作如修改用户信息、转账等。 为了避免 CSRF 攻击可以采取以下措施 验证来源站点在服务端对请求的来源站点进行验证只允许来自合法站点的请求。可以在请求中添加一个 token 来进行验证防止伪造的请求被执行。 限制敏感操作对于一些敏感操作如修改用户信息、删除数据等需要进行二次确认或者设置必须使用 POST 方法才能执行的操作。 合理设置 Cookie在 Cookie 中设置 HttpOnly 属性防止 Cookie 被 JavaScript 获取。 使用验证码在关键操作前添加验证码校验确保操作是由人类进行的。 及时更新定期更新软件和框架并及时修复已知漏洞。 网络编程 TCP 和 UDP 区别 TCP是一种面向连接的协议它在数据传输之前需要进行三次握手建立连接建立连接后才能进行数据传输而且在传输数据时需要保证数据的可靠性即要保证数据的顺序和完整性所以TCP具有高可靠性和安全性的特点但是传输效率相对较低适用于需要保证数据可靠性的场景如文件传输、邮件传输等。 UDP是一种无连接的协议它不需要进行连接的建立和断开数据包可以直接发送到目的地址但是由于不保证数据的可靠性和顺序所以在传输数据时有可能丢失数据、数据包到达的顺序与发送时的不同等情况但是传输效率相对较高适用于需要高效传输数据的场景如实时音视频传输、游戏等。 因此TCP适用于需要保证数据可靠性的场景UDP适用于需要高效传输数据的场景。 HTTP 常见状态码 1xx服务器收到请求需要请求者继续执行操作 2xx操作被成功接收并处理 3xx重定向需要进一步操作完成请求 4xx客户端错误请求有语法错误或无法完成请求 5xx服务端错误服务器处理请求过程中发生错误 - 200请求成功 - 301资源被永久转义到其他 URL - 403Forbidden - 404请求资源不存在 - 500内部服务器错误 - 504充当网关或代理的服务器未及时从远程服务器获取请求 - 400 Bad Request  /客户端请求有语法错误不能被服务器所理解 - 503 Server Unavailable  服务器当前不能处理客户端的请求一段时间后可能恢复正常 - 401 Unauthorized 请求未经授权这个状态代码必须和WWW-Authenticate报头域一起使用 http 和 https 区别 HTTPHyperText Transfer Protocol和HTTPSHyperText Transfer Protocol Secure都是应用层协议用于在网络中传输数据。HTTP协议是不安全的而HTTPS协议通过加密和身份验证来提供更高的安全性。 下面是HTTP和HTTPS之间的区别 1.安全性HTTP不提供数据加密而HTTPS使用 SSL/TLS 协议对传输的数据进行加密从而更加安全。 2.端口HTTP使用端口80而HTTPS使用端口443。 3.证书HTTPS需要使用数字证书来验证网站的身份确保网站是可信的而HTTP不需要证书。 4.速度由于加密和解密数据需要额外的计算资源HTTPS比HTTP要慢一些。 5.使用场景HTTPS适用于敏感数据的传输如个人身份信息、支付信息等而HTTP适用于不需要保密性的数据传输。 总的来说HTTP适用于一些不需要保密性的场景而HTTPS则更适用于需要保密性和数据安全的场景。 Unix 网络模型 阻塞 I/O最基本的网络模型在 I/O 时进程会一直等待直到 I/O 操作完成。等待过程中进程无法进行其他操作因此不能同时处理多个连接。适用于连接数较少的应用场景。 非阻塞 I/O进程不会等待而是立即返回。若操作未完成进程会再次轮询。可以处理多个请求但需要轮询技术会导致 CPU 占用率较高。 I/O 多路复用允许进程同时监听多个连接的 I/O 操作它通过 select、poll 或 epoll 等系统调用实现。可以有效处理大量连接而且 CPU 占用率比非阻塞 I/O 模型低。 信号驱动 I/O通过信号函数来实现异步 I/O 操作在进行 I/O 操作时进程会发起一个系统调用并注册一个信号处理函数在 I/O 操作完成后系统会向进程发送一个信号进程就可以在信号处理函数中进行后续处理。优点是可以处理多个连接而且 CPU 占用率也较低但需要编写复杂的信号处理函数。 异步 I/O最先进的网络模型它通过 aio_read、aio_write 等异步 I/O 函数来实现。在进行 I/O 操作时进程会发起一个异步 I/O 请求并继续执行后续操作当 I/O 操作完成时系统会向进程发送一个信号或回调函数进程可以在回调函数中进行后续处理。这种模型可以同时处理多个连接而且 CPU 的占用率也很低但需要操作系统支持异步 I/O 函数。 请介绍一下 三次握手和四次挥手 三次握手 客户端发送一个 SYN 数据包到服务器端口进入 SYN_SEND 状态等待服务器确认。 服务器收到 SYN 数据包必须确认客户端的 SYN同时也发送一个 SYN 数据包到客户端进入 SYN_RECV 状态。 客户端收到服务器的 SYN 数据包必须向服务器发送确认此包发送完毕客户端和服务器进入 ESTABLISHED 状态完成三次握手。 四次挥手 客户端发送一个 FIN 数据包表示客户端已经没有数据要发送了进入 FIN_WAIT_1 状态。 服务器收到 FIN 数据包返回一个 ACK 数据包表示收到了客户端的关闭请求进入 CLOSE_WAIT 状态等待服务器端的数据发送完成。 服务器端数据发送完成发送一个 FIN 数据包请求关闭连接进入 LAST_ACK 状态。 客户端收到服务器的 FIN 数据包发送一个 ACK 数据包表示已经收到服务器的关闭请求进入 TIME_WAIT 状态。服务器收到 ACK 数据包后进入 CLOSED 状态连接关闭。 通过三次握手保证了客户端和服务器都能够正常通信四次挥手则是保证了客户端和服务器都能够正确关闭连接避免了数据丢失和重复发送等问题。 select、poll 和 epoll 的区别 select、poll、epoll 都是 I/O 多路复用的机制用于实现同时监听多个文件描述符的可读/可写/异常事件从而避免阻塞等待。 它们的主要区别如下 select 和 poll 对文件描述符的管理采用的是线性扫描方式每次调用都需要将全部的文件描述符从应用进程中复制到内核中效率较低。而 epoll 采用基于事件驱动的方式只有当描述符状态发生变化时才会调用回调函数。 select 和 poll 的缺点在于每次调用都需要重复地将描述符集合从用户态复制到内核态而 epoll 利用了内核与用户空间共享内存的方式避免了这种复制开销。因此当需要监听的文件描述符数量较大时epoll 的效率会更高。 在 epoll 中可以使用 ETEdge Trigger和 LTLevel Trigger两种触发方式。LT 模式下当一个文件描述符上有事件发生时epoll_wait() 就会立即返回应用程序可以进行相应的操作。ET 模式下只有当文件描述符从无可读/写/异常状态转变为可读/写/异常状态时才会通知应用程序。因此在 ET 模式下需要注意一些细节问题例如非阻塞 IO 和边缘触发模式的配合使用避免遗漏事件等。 总之epoll 是相比于 select 和 poll 更加高效的一种 I/O 多路复用机制尤其在需要同时监听大量文件描述符的情况下表现更优秀。
http://www.tj-hxxt.cn/news/132366.html

相关文章:

  • 安徽人防工程建设网站伍佰亿书画网网站
  • 为企业做网站策划案合肥百度快照优化排名
  • 注册越南网站vnwordpress国外主题网站模板
  • 宾馆网站如何做会计分录软件开发工具的主要的分类方法
  • 保定网站建设技术支持外贸网站建设信息
  • 宁夏建设工程招投标管理中心网站wordpress技术网主题
  • 网站建设网站需要什么wordpress 模板森林
  • 找素材的网站大全php做网站的优势
  • 品牌网站建设浩森宇特做网站推广用自己维护吗
  • 网站域名已经被绑定哪里能买精准客户电话
  • 网站制作怎样做贵阳网站设计
  • iis 设置网站权限dw可以制作网站吗
  • 网站用什么语言wordpress 添加自定义栏目
  • 上海网站建设hxwlkj房产系统平台
  • 电子商务网站建设理解公司如何做网络推广营销
  • 网站开发 建设叫什么怎样做二维码链接到网站上
  • 专业 旅游网站建设企业自适应网站制作
  • .net做网站的方式网络优化的工作流程
  • 网站开发工资山东网页平面美工培训
  • 网站建设时间 人力及成本估算网页实训内容及过程
  • 网站建设简介怎样用网站做淘宝客
  • 网站没备案品质好的广告语
  • 上海专业网站建设网青岛建设工程信息网
  • wp风格网站手机在线做ppt的网站有哪些问题
  • 克隆网站首页做单页站几个文件网站做推广企业
  • 网站建设的cms系统江苏弘盛建设工程集团有限公司网站
  • 18种最有效推广的方式东莞网站制作十年乐云seo
  • 舟山市规划建设局网站网站开发者 敬请期待
  • 李沧网站建设公司上海网页制作电话
  • 微信网站设计运营自己做网站需要服务器吗