深入浅出Node js

深入浅出Node js pdf epub mobi txt 电子书 下载 2025

朴灵 著
图书标签:
  • Node
  • js
  • JavaScript
  • 后端开发
  • 服务器端
  • Web开发
  • 编程
  • 技术
  • 计算机
  • IT
  • 入门
想要找书就要到 静思书屋
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
店铺: 蓝墨水图书专营店
出版社: 人民邮电出版社
ISBN:9787115335500
商品编码:22126397849
包装:平装
出版时间:2013-12-01

具体描述

基本信息

书名:深入浅出Node js

:69.00元

作者:朴灵

出版社:人民邮电出版社

出版日期:2013-12-01

ISBN:9787115335500

字数:

页码:

版次:1

装帧:平装

开本:12k

商品重量:0.4kg

编辑推荐


**本深度讲解Node的图书源码级别探寻过Node的实现原理*一线Node开发者*真实的经验

内容提要


本书从不同的视角介绍了 Node 内在的特点和结构。由首章Node 介绍为索引,涉及Node的各个方面,主要内容包含模块机制的揭示、异步I/O 实现原理的展现、异步编程的探讨、内存控制的介绍、二进制数据Buffer的细节、Node 中的网络编程基础、Node 中的Web 开发、进程间的消息传递、Node 测试以及通过Node构建产品需要的注意事项。后的附录介绍了Node 的安装、调试、编码规范和NPM 仓库等事宜。
本书适合想深入了解 Node 的人员阅读。

目录


第1章 Node简介 1
1.1 Node的诞生历程 1
1.2 Node的命名与起源 1
1.2.1 为什么是 2
1.2.2 为什么叫Node 2
1.3 Node给带来的意义 2
1.4 Node的特点 4
1.4.1 异步I/O 4
1.4.2 事件与回调函数 6
1.4.3 单线程 7
1.4.4 跨平台 7
1.5 Node的应用场景 8
1.5.1 I/O密集型 8
1.5.2 是否不擅长CPU密集型业务 8
1.5.3 与遗留系统和平共处 10
1.5.4 分布式应用 10
1.6 Node的使用者 10
1.7 参考资源 11
第2章 模块机制 12
2.1 CommonJS规范 13
2.1.1 CommonJS的出发点 13
2.1.2 CommonJS的模块规范 14
2.2 Node的模块实现 15
2.2.1 优先从缓存加载 16
2.2.2 路径分析和文件定位 16
2.2.3 模块编译 18
2.3 核心模块 20
2.3.1 核心模块的编译过程 21
2.3.2 C/C 核心模块的编译过程 22
2.3.3 核心模块的引入流程 25
2.3.4 编写核心模块 25
2.4 C/C 扩展模块 27
2.4.1 前提条件 28
2.4.2 C/C 扩展模块的编写 29
2.4.3 C/C 扩展模块的编译 30
2.4.4 C/C 扩展模块的加载 31
2.5 模块调用栈 32
2.6 包与NPM 33
2.6.1 包结构 34
2.6.2 包描述文件与NPM 34
2.6.3 NPM常用功能 37
2.6.4 局域NPM 42
2.6.5 NPM潜在问题 43
2.7 前后端共用模块 44
2.7.1 模块的侧重点 44
2.7.2 AMD规范 44
2.7.3 CMD规范 45
2.7.4 兼容多种模块规范 45
2.8 总结 46
2.9 参考资源 46
第3章 异步I/O 47
3.1 为什么要异步I/O 47
3.1.1 用户体验 48
3.1.2 资源分配 49
3.2 异步I/O实现现状 50
3.2.1 异步I/O与非阻塞I/O 50
3.2.2 理想的非阻塞异步I/O 54
3.2.3 现实的异步I/O 54
3.3 Node的异步I/O 56
3.3.1 事件循环 56
3.3.2 观察者 56
3.3.3 请求对象 57
3.3.4 执行回调 59
3.3.5 小结 60
3.4 非I/O的异步API 60
3.4.1 定时器 60
3.4.2 process.nextTick() 61
3.4.3 setImmediate() 62
3.5 事件驱动与高性能服务器 63
3.6 总结 65
3.7 参考资源 65
第4章 异步编程 66
4.1 函数式编程 66
4.1.1 高阶函数 66
4.1.2 偏函数用法 67
4.2 异步编程的优势与难点 68
4.2.1 优势 69
4.2.2 难点 70
4.3 异步编程解决方案 74
4.3.1 事件发布/订阅模式 74
4.3.2 Promise/Deferred模式 82
4.3.3 流程控制库 93
4.4 异步并发控制 105
4.4.1 bagpipe的解决方案 105
4.4.2 async的解决方案 109
4.5 总结 110
4.6 参考资源 110
第5章 内存控制 111
5.1 V8的垃圾回收机制与内存限制 111
5.1.1 Node与V8 112
5.1.2 V8的内存限制 112
5.1.3 V8的对象分配 112
5.1.4 V8的垃圾回收机制 113
5.1.5 查看垃圾回收日志 119
5.2 高效使用内存 121
5.2.1 作用域 121
5.2.2 闭包 123
5.2.3 小结 124
5.3 内存指标 124
5.3.1 查看内存使用情况 124
5.3.2 堆外内存 126
5.3.3 小结 127
5.4 内存泄漏 127
5.4.1 慎将内存当做缓存 127
5.4.2 关注队列状态 130
5.5 内存泄漏排查 130
5.5.1 node-heapdump 131
5.5.2 node-memwatch 132
5.5.3 小结 135
5.6 大内存应用 135
5.7 总结 136
5.8 参考资源 136
第6章 理解Buffer 137
6.1 Buffer结构 137
6.1.1 模块结构 137
6.1.2 Buffer对象 138
6.1.3 Buffer内存分配 139
6.2 Buffer的转换 141
6.2.1 字符串转Buffer 141
6.2.2 Buffer转字符串 142
6.2.3 Buffer不支持的编码类型 142
6.3 Buffer的拼接 143
6.3.1 乱码是如何产生的 144
6.3.2 setEncoding()与string_decoder() 144
6.3.3 正确拼接Buffer 145
6.4 Buffer与性能 146
6.5 总结 149
6.6 参考资源 149
第7章 网络编程 150
7.1 构建TCP服务 150
7.1.1 TCP 150
7.1.2 创建TCP服务器端 151
7.1.3 TCP服务的事件 153
7.2 构建UDP服务 154
7.2.1 创建UDP套接字 154
7.2.2 创建UDP服务器端 154
7.2.3 创建UDP客户端 155
7.2.4 UDP套接字事件 155
7.3 构建服务 155
7.3.1 156
7.3.2 模块 157
7.3.3 客户端 161
7.4 构建WebSocket服务 163
7.4.1 WebSocket握手 164
7.4.2 WebSocket数据传输 167
7.4.3 小结 169
7.5 网络服务与安全 169
7.5.1 TLS/SSL 170
7.5.2 TLS服务 172
7.5.3 S服务 173
7.6 总结 175
7.7 参考资源 176
第8章 构建Web应用 177
8.1 基础功能 177
8.1.1 请求方法 178
8.1.2 路径解析 179
8.1.3 查询字符串 180
8.1.4 Cookie 181
8.1.5 Session 184
8.1.6 缓存 190
8.1.7 Basic认证 193
8.2 数据上传 195
8.2.1 表单数据 195
8.2.2 其他格式 196
8.2.3 附件上传 197
8.2.4 数据上传与安全 199
8.3 路由解析 201
8.3.1 文件路径型 202
8.3.2 MVC 202
8.3.3 RESTful 207
8.4 中间件 210
8.4.1 异常处理 214
8.4.2 中间件与性能 215
8.4.3 小结 216
8.5 页面渲染 217
8.5.1 内容响应 217
8.5.2 视图渲染 219
8.5.3 模板 220
8.5.4 Bigpipe 231
8.6 总结 235
8.7 参考资源 235
第9章 玩转进程 236
9.1 服务模型的变迁 236
9.1.1 石器时代:同步 236
9.1.2 青铜时代:复制进程 237
9.1.3 白银时代:多线程 237
9.1.4 黄金时代:事件驱动 237
9.2 多进程架构 238
9.2.1 创建子进程 239
9.2.2 进程间通信 240
9.2.3 句柄传递 242
9.2.4 小结 247
9.3 集群稳定之路 248
9.3.1 进程事件 248
9.3.2 自动重启 249
9.3.3 负载均衡 254
9.3.4 状态共享 255
9.4 Cluster模块 257
9.4.1 Cluster工作原理 258
9.4.2 Cluster事件 259
9.5 总结 259
9.6 参考资源 260
第10章 测试 261
10.1 单元测试 261
10.1.1 单元测试的意义 261
10.1.2 单元测试介绍 263
10.1.3 工程化与自动化 276
10.1.4 小结 277
10.2 性能测试 278
10.2.1 基准测试 278
10.2.2 压力测试 280
10.2.3 基准测试驱动开发 281
10.2.4 测试数据与业务数据的转换 283
10.3 总结 284
10.4 参考资源 284
第11章 产品化 285
11.1 项目工程化 285
11.1.1 目录结构 285
11.1.2 构建工具 286
11.1.3 编码规范 289
11.1.4 代码审查 289
11.2 部署流程 290
11.2.1 部署环境 291
11.2.2 部署操作 291
11.3 性能 293
11.3.1 动静分离 293
11.3.2 启用缓存 294
11.3.3 多进程架构 294
11.3.4 读写分离 295
11.4 日志 295
11.4.1 访问日志 295
11.4.2 异常日志 296
11.4.3 日志与数据库 299
11.4.4 分割日志 299
11.4.5 小结 299
11.5 监控报警 299
11.5.1 监控 300
11.5.2 报警的实现 302
11.5.3 监控系统的稳定性 303
11.6 稳定性 303
11.7 异构共存 304
11.8 总结 305
11.9 参考资源 305
附录A 安装Node 306
A.1 Windows系统下的Node安装 306
A.2 Mac系统下Node的安装 307
A.3 Linux系统下Node的安装 308
A.4 总结 309
A.5 参考资源 309
附录B 调试Node 310
B.1 Debugger 310
B.2 Node Inspector 311
B.2.1 安装Node Inspector 312
B.2.2 错误堆栈 312
B.3 总结 313
附录C Node编码规范 314
C.1 根源 314
C.2 编码规范 315
C.2.1 空格与格式 315
C.2.2 命名规范 317
C.2.3 比较操作 318
C.2.4 字面量 318
C.2.5 作用域 318
C.2.6 数组与对象 319
C.2.7 异步 320
C.2.8 类与模块 320
C.2.9 注解规范 321
C.3 佳实践 321
C.3.1 冲突的解决原则 321
C.3.2 给编辑器设置检测工具 321
C.3.3 版本控制中的hook 322
C.3.4 持续集成 322
C.4 总结 322
C.5 参考资源 323
附录D 搭建局域NPM仓库 324
D.1 NPM仓库的安装 325
D.1.1 安装Erlang和CouchDB 325
D.1.2 搭建NPM仓库 326
D.2 高阶应用 328
D.2.1 镜像仓库 328
D.2.2 私有模块应用 328
D.2.3 纯私有仓库 329
D.3 总结 331
D.4 参考资源 332

作者介绍


朴灵
真名田永强,文艺型码农,就职于*数据平台,工程师,Node.js布道者,写了多篇文章介绍Node.js的细节。活跃于ode社区,是线下会议NodeParty的组织者和JSConfChina(沪JS和京JS)的组织者之一。热爱开源,多个Node.js模块的作者。叩首问路,码梦为生。

文摘


序言



《网络浪潮中的JavaScript:从后端到全栈的蜕变之路》 简介: 曾几何时,JavaScript 的舞台似乎仅限于浏览器那一方小小的天地,它的使命似乎就是让网页动起来,让用户体验更加丰富多彩。然而,随着技术的飞速发展,一股颠覆性的力量悄然兴起,JavaScript 挣脱了浏览器的束缚,以前所未有的姿态席卷了整个开发领域。本书《网络浪潮中的JavaScript:从后端到全栈的蜕变之路》正是聚焦于这一激动人心的变革,深入剖析了 JavaScript 如何凭借其独特的优势,从前端的宠儿,一跃成为构建现代化、高性能、可扩展的网络应用的基石。 本书并非一本枯燥的技术手册,而是以一种生动、引人入胜的方式,带领读者踏上一段探索 JavaScript 在服务器端乃至全栈开发中潜力的旅程。我们将从 JavaScript 语言本身的核心特性出发,回顾其演进历程,理解其设计哲学,并重点探讨那些使其能够在后端独当一面的关键能力。随后,我们将深入剖析 Node.js 这个现象级的运行时环境,揭示其非阻塞 I/O 和事件驱动模型的强大之处,以及如何利用这些特性来构建高并发、低延迟的网络服务。 第一部分:JavaScript 的进化与Node.js 的崛起 JavaScript 的基因解码: 在深入 Node.js 之前,我们有必要重新审视 JavaScript 这门语言本身。本书将为你梳理 JavaScript 的核心概念,例如: 原型链继承与 ES6 Classes: 理解 JavaScript 对象是如何继承的,从经典的基于原型的继承机制,到 ES6 引入的更直观的类语法,我们将探究其背后的原理,以及如何巧妙地运用它们来组织代码。 闭包的魔力: 闭包是 JavaScript 中一个强大且常被误解的概念。我们将通过丰富的实例,揭示闭包如何实现数据封装、模拟私有变量,以及在异步编程中的关键作用。 异步编程模式: 回调函数、Promise、async/await,JavaScript 在处理异步操作方面经历了漫长的演进。本书将详细阐述这些模式的优缺点,以及如何根据实际场景选择最合适的方案,告别“回调地狱”。 模块化规范: 从 CommonJS 到 ES Modules,理解不同的模块化规范如何影响代码的组织和加载,以及如何在 Node.js 和浏览器环境中统一使用。 垃圾回收机制: 了解 JavaScript 引擎的内存管理机制,如何避免内存泄漏,优化应用性能。 Node.js 的诞生与哲学: Node.js 的出现改变了 Web 开发的格局。我们将: 追溯 Node.js 的起源: 了解 V8 引擎的强大能力,以及 Ryan Dahl 如何构想出 Node.js 这个革命性的项目。 理解事件驱动与非阻塞 I/O: 这是 Node.js 的核心优势。我们将深入解析事件循环(Event Loop)的工作原理,以及它如何实现高效的 I/O 操作,从而处理大量并发请求。 NPM 的生态系统: NPM (Node Package Manager) 是 Node.js 生态的灵魂。我们将探讨 NPM 的作用,如何使用它来管理项目依赖,以及如何利用丰富的第三方库加速开发。 模块系统详解: Node.js 的模块加载机制,`require` 和 `module.exports` 的工作方式,以及 ES Modules 在 Node.js 中的支持。 第二部分:构建高性能的网络应用 HTTP 协议深度解析: 作为 Web 的基石,HTTP 协议的理解至关重要。本书将: HTTP 请求与响应的生命周期: 详细分析 HTTP 请求从发送到响应的整个过程,包括请求头、请求体、响应头、响应体的组成及其含义。 RESTful API 设计原则: 学习如何设计清晰、规范、易于理解的 RESTful API,以及如何在 Node.js 中实现它们。 状态码与错误处理: 理解常见的 HTTP 状态码,并学习如何优雅地处理客户端和服务器端的错误。 HTTPS 的安全保障: 了解 HTTPS 的工作原理,以及如何在 Node.js 应用中实现 SSL/TLS 加密。 Express.js:现代 Web 应用的瑞士军刀: Express.js 是 Node.js 生态中最受欢迎的 Web 框架之一。我们将: Express.js 的核心组件: 路由(Routing)、中间件(Middleware)、视图引擎(View Engine)等,以及它们如何协同工作。 构建 RESTful API: 利用 Express.js 快速搭建功能完备的 RESTful API 服务,处理 GET、POST、PUT、DELETE 等请求。 中间件的强大之处: 深入理解中间件的概念,以及如何编写自定义中间件来实现认证、日志记录、请求解析等功能。 模板引擎的应用: 使用 EJS、Pug 等模板引擎,实现服务器端渲染,动态生成 HTML。 构建健壮的后端服务: 数据库集成: 关系型数据库: 学习如何使用 Sequelize、Knex.js 等 ORM/Query Builder 来操作 MySQL、PostgreSQL 等关系型数据库。 NoSQL 数据库: 探索 MongoDB 的强大之处,使用 Mongoose ODM 来构建高性能的 Node.js 应用。 身份验证与授权: Session-based Authentication: 使用 Passport.js 等库实现基于 Session 的用户认证。 Token-based Authentication (JWT): 学习 JSON Web Tokens (JWT) 的原理,以及如何在 Node.js 中安全地实现基于 Token 的认证。 错误处理与日志记录: 建立一套完善的错误处理机制,使用 Winston、Morgan 等库进行日志记录,方便排查问题。 API 安全实践: 防范 SQL 注入、XSS 攻击、CSRF 攻击等常见的 Web 安全威胁。 第三部分:全栈开发的实践与进阶 Node.js 作为构建工具: Node.js 不仅仅是一个服务器运行时,它更是前端开发中强大的构建工具。 Webpack/Vite 的深度应用: 学习如何配置 Webpack 或 Vite,实现模块打包、代码压缩、热重载等功能,提升前端开发效率。 Babel 的转译魔法: 理解 Babel 如何将 ES6+ 的新特性转换为浏览器兼容的代码。 Linting 与 Formatting: 使用 ESLint 和 Prettier 统一代码风格,提高代码质量。 前后端分离架构的优势: 探讨前后端分离带来的好处,例如职责清晰、开发并行、技术栈选择自由等。 API Gateway 的角色: 了解 API Gateway 如何统一管理和路由微服务,提高系统的可维护性和扩展性。 现代前端框架与 Node.js 的协同: React、Vue、Angular 与 Node.js 的集成: 学习如何在流行的前端框架项目中使用 Node.js 来构建后端 API,实现全栈开发。 Server-Side Rendering (SSR) 与 Static Site Generation (SSG): 深入理解 SSR 和 SSG 的概念,以及如何在 Node.js 环境下实现,提升网站的 SEO 和首屏加载速度。 微服务架构与 Node.js: 微服务的设计理念: 学习微服务拆分、服务间通信、服务治理等基本概念。 使用 Node.js 构建微服务: 探讨使用 Express.js、NestJS 等框架来构建独立的微服务,以及如何利用 Docker 和 Kubernetes 进行部署和管理。 性能优化与高可用性: Node.js 性能调优: 深入分析 Node.js 性能瓶颈,学习使用 Profiler 工具,进行 CPU 和内存优化。 集群与负载均衡: 利用 Node.js 的 `cluster` 模块实现多进程,以及 Nginx 等反向代理实现负载均衡,提高服务的可用性和吞吐量。 消息队列的应用: 了解 RabbitMQ、Kafka 等消息队列在解耦系统、异步处理任务方面的作用。 总结: 《网络浪潮中的JavaScript:从后端到全栈的蜕变之路》旨在为读者提供一个全面、深入的 JavaScript 全栈开发视角。本书通过理论与实践相结合的方式,从 Node.js 的核心机制到具体的应用开发,再到现代化的架构设计,全方位地展现了 JavaScript 在网络开发中的强大力量。无论你是初学者,还是有一定经验的开发者,都将从中受益匪浅,掌握构建下一代高性能、可扩展网络应用的必备技能,成为一名真正的全栈工程师,驾驭网络浪潮,引领技术潮流。

用户评价

评分

《深入浅出Node.js》这本书,我之前就听说过,一直想找机会好好拜读一下。最近总算如愿以偿,翻开的第一页,就被它那种深入浅出的风格深深吸引了。我一直觉得,学习一门技术,最怕的就是那些晦涩难懂的理论堆砌,让人读起来云里雾里,仿佛在绕圈子。《深入浅出Node.js》在这方面做得非常出色,它没有直接抛出大量的API和概念,而是从最基础的“为什么”开始,一步步引导你理解Node.js的核心思想。比如,它在讲解异步编程的时候,不是上来就讲回调地狱或者Promise,而是先通过生活中的例子,比如点餐、取快递,让你直观感受到同步和异步的区别,然后才引入Node.js的事件循环机制。这种由浅入深的讲解方式,让我这个初学者也能轻松跟上节奏,并且在理解概念的同时,也培养了解决实际问题的能力。我尤其喜欢书中那些大量的代码示例,它们不仅仅是简单的演示,而是经过精心设计,能够清晰地展示某个概念的应用场景,并附带详细的解释,让我能够一边看一边动手实践,加深理解。这本书的排版和插图也很赞,让原本枯燥的技术内容变得生动有趣,阅读体验非常棒。

评分

在我看来,一本好的技术书籍,除了理论讲解到位,更重要的是能帮助读者建立起系统性的知识框架。《深入浅出Node.js》在这方面绝对是我的榜样。它并没有零散地介绍Node.js的各个模块,而是将它们有机地串联起来,让你明白这些模块是如何协同工作的。比如说,在讲解文件系统(fs模块)的时候,它不会仅仅告诉你`fs.readFile`怎么用,而是会联系到Node.js的非阻塞I/O特性,让你理解为什么fs模块的操作会如此高效。接着,它会引申到流(Stream)的概念,教会你如何利用流来处理大文件,避免内存溢出,这对于构建高性能的应用来说至关重要。而且,这本书对Node.js的包管理(npm)也进行了深入的讲解,从如何发布自己的包,到如何管理依赖,再到包的生命周期,都讲解得非常细致。我之前对npm的理解仅停留在安装和使用层面,读完这部分内容,才真正理解了npm的强大之处,以及它在Node.js生态中的核心地位。书中的每一个章节都像是在为你搭建一层知识的阶梯,让你在不知不觉中,就对Node.js有了全面而深刻的认识。

评分

作为一名对Web开发充满热情的程序员,我一直希望能找到一本能够让我快速上手Node.js并能构建实际应用的指南。《深入浅出Node.js》恰恰满足了我的这一需求。它在讲解基础知识的同时,并没有忽略实际应用中的重要环节。比如,它详细介绍了如何使用Express框架来构建Web服务器,从路由的定义、中间件的使用,到模板引擎的集成,都进行了循序渐进的讲解。让我印象深刻的是,书中对于RESTful API的设计原则和实现方式也有很好的阐述,这对于我日后独立开发Web服务非常有帮助。另外,本书还提到了如何与数据库进行交互,虽然可能没有像专门的数据库书籍那样深入,但对于Node.js开发者来说,理解如何连接MongoDB、MySQL等常见数据库,并进行数据的增删改查,已经足够了。最重要的是,它能够引导你将这些零散的知识点串联起来,最终构建出一个完整的Web应用。读完这本书,我感觉自己不再是那个对Node.js一知半解的菜鸟,而是有信心去尝试构建自己的项目了。

评分

我一直认为,学习编程技术,不仅要知其然,更要知其所以然。《深入浅出Node.js》在这方面做得非常出色,它能够让你理解Node.js的底层原理,而不仅仅是停留在API的使用层面。我特别喜欢书中关于事件循环(Event Loop)的讲解,它用非常形象的比喻,将一个复杂的异步执行流程变得清晰易懂。通过对事件循环的深入理解,我才真正明白了Node.js为什么能够处理高并发的I/O密集型任务。此外,书中对Node.js的进程和线程模型也进行了探讨,让你了解Node.js在单线程环境下如何通过事件驱动和非阻塞I/O实现高效的并发。这种对底层机制的揭示,不仅能让你更好地掌握Node.js,也能让你在遇到疑难问题时,能够从根本上找到解决方案。这本书就像一个内窥镜,让你能够深入到Node.js的内部,了解它的工作方式,从而成为一名更优秀的Node.js开发者。

评分

坦白说,市面上关于Node.js的书籍琳琅满目,但真正能做到“深入浅出”的却不多。《深入浅出Node.js》这本书,在我看来,就是其中的佼佼者。它不仅涵盖了Node.js的基础知识,还对一些进阶的主题进行了探讨,比如如何进行单元测试、如何实现性能优化,以及如何部署Node.js应用。书中对于测试的讲解,让我认识到了自动化测试的重要性,并学习到了如何使用Mocha、Chai等工具来编写测试用例,这对于保证代码质量至关重要。在性能优化方面,它也提供了一些实用的技巧和思路,比如如何利用缓存、如何进行代码优化等,这对于我日后开发大型、高性能的应用大有裨益。最令人兴奋的是,这本书还为读者指明了Node.js应用的部署方向,虽然可能不是最详细的部署指南,但它能够让你对如何将自己的Node.js应用发布到生产环境有一个大致的了解。总而言之,这本书是一本非常全面的Node.js学习指南,无论是初学者还是有一定经验的开发者,都能从中受益匪浅。

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.idnshop.cc All Rights Reserved. 静思书屋 版权所有