• 关于 Node.js文件系统 的搜索结果

问题

在阿里云上安装和运行Node.js全功略

ycwong 2019-12-01 21:29:22 58704 浏览量 回答数 10

问题

阿里云ECS(windows)部署node遇到问题

just-for-one 2019-12-01 20:17:24 1064 浏览量 回答数 2

问题

【javascript学习全家桶】934道javascript热门问题,阿里百位技术专家答疑解惑

管理贝贝 2019-12-01 20:07:22 6202 浏览量 回答数 1

新用户福利专场,云服务器ECS低至102元/年

新用户专场,1核2G 102元/年起,2核4G 699.8元/年起

问题

ECS如何部署Node.js项目(CentOS)

boxti 2019-12-01 21:43:37 1794 浏览量 回答数 0

问题

在 Debian 8 系统里安装 cmswing 网站程序

dongshan8 2019-12-01 21:19:37 2787 浏览量 回答数 1

问题

Node.js SDK 的相关文档:Node.js SDK 使用说明

行者武松 2019-12-01 22:00:57 1584 浏览量 回答数 0

回答

步骤1:配置开发环境 配置开发环境-Mac环境 前提条件 已安装Node.js。 Node.js版本建议为8系统,推荐8.10。 若未安装,请下载操作系统对应的安装包进行安装。 已安装VS Code。 若未安装,请下载操作系统对应的安装包进行安装。 操作步骤 打开Bash软件。 执行以下命令,安装Honeycomb。 sudo npm install honeycomb-cli -g 执行以下命令,配置Honeycomb。 honeycomb config registry registry=https://registry.npm.taobao.org 选择需要创建应用的文件夹,执行以下命令,初始化城市大脑应用。 cd $app_root //请根据实际情况替换 honeycomb init -t brain 初始化成功后,对应文件夹下会生成代码目录,如下图所示。 安装cnpm。 sudo npm install -g cnpm --registry=https://registry.npm.taobao.org 执行以下命令,安装运行依赖环境。 make install 若遇到如下错误: xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun 请执行以下命令。 xcode-select –install 执行以下命令,安装阿里云API网关的依赖。 cnpm install aliyun-api-gateway -S 执行以下命令,启动项目。 honeycomb start 启动项目成功后,访问 http://localhost:8001/app/app-name,即可在本地环境中查看运行效果,如下图所示。 注意:启动项目成功后,请不要关掉Bash窗口。 配置开发环境-Windows环境 前提条件 已安装Node.js。 Node.js版本建议为8系统,推荐8.10。 若未安装,请下载操作系统对应的安装包进行安装。 已安装VS Code。 若未安装,请下载操作系统对应的安装包进行安装。 已完成gitbash的安装。 若未安装,请下载操作系统对应的安装包进行安装。 注意事项: 选择安装目录 c:\lib\git。 出现git命令工具和cmd相关的选项(3选1的场景),请选择第三个。 安装工具包补丁。 下载如下工具包,解压,将里面所有的文件copy到 GitBash 安装目录下的 usr\bin\ 中。此例中为 c:\lib\git\usr\bin\。 cmd-tools.zip

剑曼红尘 2020-03-24 15:23:09 0 浏览量 回答数 0

回答

优化 Loader 对于 Loader 来说,影响打包效率首当其冲必属 Babel 了。因为 Babel 会将代码转为字符串生成 AST,然后对 AST 继续进行转变最后再生成新的代码,项目越大,转换代码越多,效率就越低。当然了,我们是有办法优化的。 首先我们可以优化 Loader 的文件搜索范围 module.exports = { module: { rules: [ { // js 文件才使用 babel test: /\.js$/, loader: 'babel-loader', // 只在 src 文件夹下查找 include: [resolve('src')], // 不会去查找的路径 exclude: /node_modules/ } ] } } 对于 Babel 来说,我们肯定是希望只作用在 JS 代码上的,然后 node_modules 中使用的代码都是编译过的,所以我们也完全没有必要再去处理一遍。 当然这样做还不够,我们还可以将 Babel 编译过的文件缓存起来,下次只需要编译更改过的代码文件即可,这样可以大幅度加快打包时间 loader: 'babel-loader?cacheDirectory=true' HappyPack 受限于 Node 是单线程运行的,所以 Webpack 在打包的过程中也是单线程的,特别是在执行 Loader 的时候,长时间编译的任务很多,这样就会导致等待的情况。 HappyPack 可以将 Loader 的同步执行转换为并行的,这样就能充分利用系统资源来加快打包效率了 module: { loaders: [ { test: /\.js$/, include: [resolve('src')], exclude: /node_modules/, // id 后面的内容对应下面 loader: 'happypack/loader?id=happybabel' } ] }, plugins: [ new HappyPack({ id: 'happybabel', loaders: ['babel-loader?cacheDirectory'], // 开启 4 个线程 threads: 4 }) ] DllPlugin DllPlugin 可以将特定的类库提前打包然后引入。这种方式可以极大的减少打包类库的次数,只有当类库更新版本才有需要重新打包,并且也实现了将公共代码抽离成单独文件的优化方案。 接下来我们就来学习如何使用 DllPlugin // 单独配置在一个文件中 // webpack.dll.conf.js const path = require('path') const webpack = require('webpack') module.exports = { entry: { // 想统一打包的类库 vendor: ['react'] }, output: { path: path.join(__dirname, 'dist'), filename: '[name].dll.js', library: '[name]-[hash]' }, plugins: [ new webpack.DllPlugin({ // name 必须和 output.library 一致 name: '[name]-[hash]', // 该属性需要与 DllReferencePlugin 中一致 context: __dirname, path: path.join(__dirname, 'dist', '[name]-manifest.json') }) ] } 然后我们需要执行这个配置文件生成依赖文件,接下来我们需要使用 DllReferencePlugin 将依赖文件引入项目中 // webpack.conf.js module.exports = { // ...省略其他配置 plugins: [ new webpack.DllReferencePlugin({ context: __dirname, // manifest 就是之前打包出来的 json 文件 manifest: require('./dist/vendor-manifest.json'), }) ] } 代码压缩 在 Webpack3 中,我们一般使用 UglifyJS 来压缩代码,但是这个是单线程运行的,为了加快效率,我们可以使用 webpack-parallel-uglify-plugin 来并行运行 UglifyJS,从而提高效率。 在 Webpack4 中,我们就不需要以上这些操作了,只需要将 mode 设置为 production 就可以默认开启以上功能。代码压缩也是我们必做的性能优化方案,当然我们不止可以压缩 JS 代码,还可以压缩 HTML、CSS 代码,并且在压缩 JS 代码的过程中,我们还可以通过配置实现比如删除 console.log 这类代码的功能。 一些小的优化点 我们还可以通过一些小的优化点来加快打包速度 resolve.extensions:用来表明文件后缀列表,默认查找顺序是 ['.js', '.json'],如果你的导入文件没有添加后缀就会按照这个顺序查找文件。我们应该尽可能减少后缀列表长度,然后将出现频率高的后缀排在前面resolve.alias:可以通过别名的方式来映射一个路径,能让 Webpack 更快找到路径module.noParse:如果你确定一个文件下没有其他依赖,就可以使用该属性让 Webpack 不扫描该文件,这种方式对于大型的类库很有帮助

前端问答 2019-12-23 21:51:21 0 浏览量 回答数 0

回答

在Web+内创建应用并在应用所依托的环境内进行部署,这一系列操作需要您先了解以下关于Web+的关键概念。 应用 Web+应用是以业务功能为主的服务设计概念,包括部署环境、部署包版本和部署环境配置,每一个应用都具有自主运行的业务功能。 部署包版本 在Web+中,部署包版本指的是应用的部署包的特定标记版本。一个部署包版本指向一个包含可部署代码的部署包文件(例如,Tomcat WAR文件)。部署包版本是应用的组成部分。应用可以有多个部署包版本,每个部署包版本都是唯一的。在部署环境中,您可以部署已上传到应用的任意部署包版本,也可以上传并部署新的部署包版本。您可以上传多个部署包版本,以测试应用运行在不同部署包版本之间的差异。 部署环境 部署环境是运行应用版本的云资源的集合。每个部署环境中只包含一个应用版本,但您可以同时在多个部署环境中运行相同或不同的应用版本。 部署环境变更配置 当您创建部署环境时,Web+会预配置您的目标应用版本所需的资源。Web+的预配置包括低成本、高可用和自定义三种模式,您选择自定义模式可以按照需求自定义部署环境中需要的资源和软件。部署环境内的参数和配置用来定义环境及其相关资源的行为方式。当您更新部署环境的配置时,Web+会自动将应用在现有的部署环境内重新部署。 部署环境配置模板 环境配置模板是环境内的资源集的模板,您可以使用Web+控制台或CLI创建并修改部署环境,然后将部署环境保存为部署环境配置模板。您可以基于配置模板,新建一个部署环境,并完成部署环境的启动。 技术栈 技术栈是操作系统、编程语言、应用服务器的组合。Web+现提供9种技术栈平台的15个技术栈版本: Tomcat: Tomcat 8.5 / Java 8 / Aliyun Linux 2.1903 Tomcat 8.5 / Dragonwell 8 / Aliyun Linux 2.1903 Java: Java 8 / Aliyun Linux 2.1903 Dragonwell 8 / Aliyun Linux 2.1903 Node.js: Node.js 8.16.0 / Aliyun Linux 2.1903 Node.js 10.16.0 / Aliyun Linux 2.1903 Go:Go 1.12.7 / Aliyun Linux 2.1903 PHP:PHP 7.3 / Aliyun Linux 2.1903 Python: Python 3.7.4 / Aliyun Linux 2.1903 Python 2.7.16 / Aliyun Linux 2.1903 ASP.NET Core: ASP.NET Core 2.2 / Aliyun Linux 2.1903 ASP.NET Core 3.0 / Aliyun Linux 2.1903 ASP.NET Core 3.1 / Aliyun Linux 2.1903 Ruby:Ruby 2.6.3 / Aliyun Linux 2.1903 Native:Native / Aliyun Linux 2.1903

1934890530796658 2020-03-23 13:44:04 0 浏览量 回答数 0

问题

在Debian 8系统中安装NodeBB

dongshan8 2019-12-01 21:38:02 4265 浏览量 回答数 1

问题

CentOS Ghost安装教程(PM2+Nginx)

寒喵 2019-12-01 21:51:11 1659 浏览量 回答数 0

问题

AliOS lite r2版本发布

码上与非门 2019-12-01 22:07:00 2804 浏览量 回答数 2

回答

首先保证系统有node.js, 可以支持npm安装,然后按照下面的简单步骤进行: npm install iview --save 这样在你的package.json可以看到:"dependencies": {"axios": "^0.16.2","iview": "^2.0.0-rc.13", 在你的main.js这种文件里面(也就是你的工程里面new Vue的那个文件),加入下面代码:import iView from 'iview';Vue.use(iView); 然后在自己新加的component 里面,你就可以直接使用iview的控件了,例如<Table>,很方便也很美观。 最后推荐你研究下iview-admin这个,如果是做一个简单的网站,比如cms管理,你可以直接下载他们的工程,参考他们的代码,甚至直接这个工程进行修改。 答案来源于网络

养狐狸的猫 2019-12-02 03:01:59 0 浏览量 回答数 0

问题

Debian/Ubuntu Ghost 1.0 安装教程

妙正灰 2019-12-01 21:18:51 2047 浏览量 回答数 0

问题

JavaScript-SDK之如何实现安装?

青衫无名 2019-12-01 21:44:18 1351 浏览量 回答数 0

回答

简介 如果您听说过 Node,或者阅读过一些文章,宣称 Node 是多么多么的棒,那么您可能会想:“Node 究竟是什么东西?”尽管不是针对所有人的,但 Node 可能是某些人的正确选择。 为试图解释什么是 Node.js,本文探究了它能解决的问题,它如何工作,如何运行一个简单应用程序,最后,Node 何时是和何时不是一个好的解决方案。本文不涉及如何编写一个复杂的 Node 应用程序,也不是一份全面的 Node 教程。阅读本文应该有助于您决定是否应该学习 Node,以便将其用于您的业务。 Node 旨在解决什么问题? Node 公开宣称的目标是 “旨在提供一种简单的构建可伸缩网络程序的方法”。当前的服务器程序有什么问题?我们来做个数学题。在 Java™ 和 PHP 这类语言中,每个连接都会生成一个新线程,每个新线程可能需要 2 MB 配套内存。在一个拥有 8 GB RAM 的系统上,理论上最大的并发连接数量是 4,000 个用户。随着您的客户端基础的增长,您希望您的 web 应用程序支持更多用户,这样,您必须添加更多服务器。当然,这会增加业务成本,尤其是服务器成本、运输成本和人工成本。除这些成本上升外,还有一个技术问题:用户可能针对每个请求使用不同的服务器,因此,任何共享资源都必须在所有服务器之间共享。例如,在 Java 中,静态变量和缓存需要在每个服务器上的 JVMs 之间共享。这就是整个 web 应用程序架构中的瓶颈:一个服务器能够处理的并发连接的最大数量。 Node 解决这个问题的方法是:更改连接连接到服务器的方式。每个连接都创建一个进程,该进程不需要配套内存块,而不是为每个连接生成一个新的 OS 线程(并向其分配一些配套内存)。Node 声称它绝不会死锁,因为它根本不允许使用锁,它不会直接阻塞 I/O 调用。Node 还宣称,运行它的服务器能支持数万个并发连接。事实上,Node 通过将整个系统中的瓶颈从最大连接数量更改到单个系统的流量来改变服务器面貌。 现在您有了一个能处理数万条并发连接的程序,那么您能通过 Node 实际构建什么呢?如果您有一个 web 应用程序需要处理这么多连接,那将是一件很 “恐怖” 的事!那是一种 “如果您有这个问题,那么它根本不是问题” 的问题。在回答上面的问题之前,我们先看看 Node 如何工作以及它被设计的如何运行。 Node 肯定不是什么 没错,Node 是一个服务器程序。但是,它肯定不 像 Apache 或 Tomcat。那些服务器是独立服务器产品,可以立即安装并部署应用程序。通过这些产品,您可以在一分钟内启动并运行一个服务器。Node 肯定不是这种产品。Apache 能添加一个 PHP 模块来允许开发人员创建动态 web 页,使用 Tomcat 的程序员能部署 JSPs 来创建动态 web 页。Node 肯定不是这种类型。 在 Node 的早期阶段(当前是 version 0.4.6),它还不是一个 “运行就绪” 的服务器程序,您还不能安装它,向其中放置文件,拥有一个功能齐全的 web 服务器。即使是要实现 web 服务器在安装完成后启动并运行这个基本功能,也还需要做大量工作。 Node 如何工作 Node 本身运行 V8 JavaScript。等等,服务器上的 JavaScript?没错,您没有看错。服务器端 JavaScript 是一个相对较新的概念,这个概念是大约两年前在 developerWorks 上讨论 Aptana Jaxer 产品时提到的(参见 参考资料)。尽管 Jaxer 一直没有真正流行,但这个理念本身并不是遥不可及的 — 为何不能在服务器上使用客户机上使用的编程语言? 什么使 V8?V8 JavaScript 引擎是 Google 用于他们的 Chrome 浏览器的底层 JavaScript 引擎。很少有人考虑 JavaScript 在客户机上实际做了些什么?实际上,JavaScript 引擎负责解释并执行代码。使用 V8,Google 创建了一个以 C++ 编写的超快解释器,该解释器拥有另一个独特特征;您可以下载该引擎并将其嵌入任何 应用程序。它不仅限于在一个浏览器中运行。因此,Node 实际上使用 Google 编写的 V8 JavaScript 引擎并将其重建为在服务器上使用。太完美了!既然已经有一个不错的解决方案可用,为何还要创建一种新语言呢? 事件驱动编程 许多程序员接受的教育使他们认为,面向对象编程是完美的编程设计,而对其他编程方法不屑一顾。Node 使用一个所谓的事件驱动编程模型。 清单 1. 客户端上使用 jQuery 的事件驱动编程 复制代码 代码如下: // jQuery code on the client-side showing how Event-Driven programming works // When a button is pressed, an Event occurs - deal with it // directly right here in an anonymous function, where all the // necessary variables are present and can be referenced directly $("#myButton").click(function(){ if ($("#myTextField").val() != $(this).val()) alert("Field must match button text"); }); 实际上,服务器端和客户端没有任何区别。没错,这没有按钮点击操作,也没有向文本字段键入的操作,但在一个更高的层面上,事件正在 发生。一个连接被建立 — 事件!数据通过连接接收 — 事件!数据通过连接停止 — 事件! 为什么这种设置类型对 Node 很理想?JavaScript 是一种很棒的事件驱动编程语言,因为它允许匿名函数和闭包,更重要的是,任何写过代码的人都熟悉它的语法。事件发生时调用的回调函数可以在捕获事件处编写。这样,代码容易编写和维护,没有复杂的面向对象框架,没有接口,没有在上面架构任何内容的潜能。只需监听事件,编写一个回调函数,然后,事件驱动编程将照管好一切! 示例 Node 应用程序 最后,我们来看一些代码!让我们将讨论过的所有内容综合起来,创建我们的第一个 Node 应用程序。由于我们已经知道,Node 对于处理高流量应用程序很理想,我们就来创建一个非常简单的 web 应用程序 — 一个为实现最大速度而构建的应用程序。下面是 “老板” 交代的关于我们的样例应用程序的具体要求:创建一个随机数字生成器 RESTful API。这个应用程序应该接受一个输入:一个名为 “number” 的参数。然后,应用程序返回一个介于 0 和该参数之间的随机数字,并将生成的数字返回调用者。由于 “老板” 希望它成为一个广泛流行的应用程序,因此它应该能处理 50,000 个并发用户。我们来看看代码: 清单 2. Node 随机数字生成器 复制代码 代码如下: // these modules need to be imported in order to use them. // Node has several modules. They are like any #include // or import statement in other languages var http = require("http"); var url = require("url"); // The most important line in any Node file. This function // does the actual process of creating the server. Technically, // Node tells the underlying operating system that whenever a // connection is made, this particular callback function should be // executed. Since we're creating a web service with REST API, // we want an HTTP server, which requires the http variable // we created in the lines above. // Finally, you can see that the callback method receives a 'request' // and 'response' object automatically. This should be familiar // to any PHP or Java programmer. http.createServer(function(request, response) { // The response needs to handle all the headers, and the return codes // These types of things are handled automatically in server programs // like Apache and Tomcat, but Node requires everything to be done yourself response.writeHead(200, {"Content-Type": "text/plain"}); // Here is some unique-looking code. This is how Node retrives // parameters passed in from client requests. The url module // handles all these functions. The parse function // deconstructs the URL, and places the query key-values in the // query object. We can find the value for the "number" key // by referencing it directly - the beauty of JavaScript. var params = url.parse(request.url, true).query; var input = params.number; // These are the generic JavaScript methods that will create // our random number that gets passed back to the caller var numInput = new Number(input); var numOutput = new Number(Math.random() * numInput).toFixed(0); // Write the random number to response response.write(numOutput); // Node requires us to explicitly end this connection. This is because // Node allows you to keep a connection open and pass data back and forth, // though that advanced topic isn't discussed in this article. response.end(); // When we create the server, we have to explicitly connect the HTTP server to // a port. Standard HTTP port is 80, so we'll connect it to that one. }).listen(80); // Output a String to the console once the server starts up, letting us know everything // starts up correctly console.log("Random Number Generator Running..."); 将上面的代码放到一个名为 “random.js” 的文件中。现在,要启动这个应用程序并运行它(进而创建 HTTP 服务器并监听端口 80 上的连接),只需在您的命令提示中输入以下命令:% node random.js。下面是服务器已经启动并运行时它看起来的样子: 复制代码 代码如下: root@ubuntu:/home/moila/ws/mike# node random.js Random Number Generator Running... 访问应用程序 应用程序已经启动并运行。Node 正在监听任何连接,我们来测试一下。由于我们创建了一个简单的 RESTful API,我们可以使用我们的 web 浏览器来访问这个应用程序。键入以下地址(确保您完成了上面的步骤):localhost/?number=27。 您的浏览器窗口将更改到一个介于 0 到 27 之间的随机数字。单击浏览器上的 “重新载入” 按钮,将得到另一个随机数字。就是这样,这就是您的第一个 Node 应用程序! Node 对什么有好处? 到此为止,应该能够回答 “Node 是什么” 这个问题了,但您可能还不清楚什么时候应该使用它。这是一个需要提出的重要问题,因为 Node 对有一些东西有好处,但相反,对另一些东西而言,目前 Node 可能不是一个好的解决方案。您需要小心决定何时使用 Node,因为在错误的情况下使用它可能会导致一个多余编码的 LOT。 它对什么有好处? 正如您此前所看到的,Node 非常适合以下情况:您预计可能有很高的流量,而在响应客户端之前服务器端逻辑和处理所需不一定是巨大的。Node 表现出众的典型示例包括: 1.RESTful API 提供 RESTful API 的 web 服务接收几个参数,解析它们,组合一个响应,并返回一个响应(通常是较少的文本)给用户。这是适合 Node 的理想情况,因为您可以构建它来处理数万条连接。它还不需要大量逻辑;它只是从一个数据库查找一些值并组合一个响应。由于响应是少量文本,入站请求时少量文本,因此流量不高,一台机器甚至也可以处理最繁忙的公司的 API 需求。 2.Twitter 队列 想像一下像 Twitter 这样的公司,它必须接收 tweets 并将其写入一个数据库。实际上,每秒几乎有数千条 tweets 达到,数据库不可能及时处理高峰时段需要的写入数量。Node 成为这个问题的解决方案的重要一环。如您所见,Node 能处理数万条入站 tweets。它能迅速轻松地将它们写入一个内存排队机制(例如 memcached),另一个单独进程可以从那里将它们写入数据库。Node 在这里的角色是迅速收集 tweet 并将这个信息传递给另一个负责写入的进程。想象一下另一种设计 — 一个常规 PHP 服务器自己试图处理对数据库的写入 — 每个 tweet 将在写入数据库时导致一个短暂的延迟,这是因为数据库调用正在阻塞通道。由于数据库延迟,一台这样设计的机器每秒可能只能处理 2000 条入站 tweets。每秒 100 万条 tweets 需要 500 个服务器。相反,Node 能处理每个连接而不会阻塞通道,从而能捕获尽可能多的 tweets。一个能处理 50,000 条 tweets 的 Node 机器只需要 20 个服务器。 3.映像文件服务器 一个拥有大型分布式网站的公司(比如 Facebook 或 Flickr)可能会决定将所有机器只用于服务映像。Node 将是这个问题的一个不错的解决方案,因为该公司能使用它编写一个简单的文件检索器,然后处理数万条连接。Node 将查找映像文件,返回文件或一个 404 错误,然后什么也不用做。这种设置将允许这类分布式网站减少它们服务映像、.js 和 .css 文件等静态文件所需的服务器数量。 它对什么有坏处? 当然,在某些情况下,Node 并非理想选择。下面是 Node 不擅长的领域: 1.动态创建的页 目前,Node 没有提供一种默认方法来创建动态页。例如,使用 JavaServer Pages (JSP) 技术时,可以创建一个在这样的 JSP 代码段中包含循环的 index.jsp 页。Node 不支持这类动态的、HTML 驱动的页面。同样,Node 不太适合作为 Apache 和 Tomcat 这样的网页服务器。因此,如果您想在 Node 中提供这样一个服务器端解决方案,必须自己编写整个解决方案。PHP 程序员不想在每次部署 web 应用程序时都编写一个针对 Apache 的 PHP 转换器,当目前为止,这正是 Node 要求您做的。 2. 关系数据库重型应用程序 Node 的目的是快速、异步和非阻塞。数据库并不一定分享这些目标。它们是同步和阻塞的,因为读写时对数据库的调用在结果生成之前将一直阻塞通道。因此,一个每个请求都需要大量数据库调用、大量读取、大量写入的 web 应用程序非常不适合 Node,这是因为关系数据库本身就能抵销 Node 的众多优势。(新的 NoSQL 数据库更适合 Node,不过那完全是另一个主题了。) 结束语 问题是 “什么是 Node.js?” 应该已经得到解答。阅读本文之后,您应该能通过几个清晰简洁的句子回答这个问题。如果这样,那么您已经走到了许多编码员和程序员的前面。我和许多人都谈论过 Node,但它们对 Node 究竟是什么一直很迷惑。可以理解,他们具有的是 Apache 的思维方式 — 服务器是一个应用程序,将 HTML 文件放入其中,一切就会正常运转。而 Node 是目的驱动的。它是一个软件程序,使用 JavaScript 来允许程序员轻松快速地创建快速、可伸缩的 web 服务器。Apache 是运行就绪的,而 Node 是编码就绪的。 Node 完成了它提供高度可伸缩服务器的目标。它并不分配一个 “每个连接一个线程” 模型,而是使用一个 “每个连接一个流程” 模型,只创建每个连接需要的内存。它使用 Google 的一个非常快速的 JavaScript 引擎:V8 引擎。它使用一个事件驱动设计来保持代码最小且易于阅读。所有这些因素促成了 Node 的理想目标 — 编写一个高度可伸缩的解决方案变得比较容易。 与理解 Node 是 什么同样重要的是,理解它不是 什么。Node 并不是 Apache 的一个替代品,后者旨在使 PHP web 应用程序更容易伸缩。事实确实如此。在 Node 的这个初始阶段,大量程序员使用它的可能性不大,但在它能发挥作用的场景中,它的表现非常好。 将来应该期望从 Node 得到什么呢?这也许是本文引出的最重要的问题。既然您知道了它现在的作用,您应该会想知道它下一步将做什么。在接下来的一年中,我期待着 Node 提供与现有的第三方支持库更好地集成。现在,许多第三方程序员已经研发了用于 Node 的插件,包括添加文件服务器支持和 MySQL 支持。希望 Node 开始将它们集成到其核心功能中。最后,我还希望 Node 支持某种动态页面模块,这样,您就可以在 HTML 文件中执行在 PHP 和 JSP(也许是一个 NSP,一个 Node 服务器页)中所做的操作。最后,希望有一天会出现一个 “部署就绪” 的 Node 服务器,可以下载和安装,只需将您的 HTML 文件放到其中,就像使用 Apache 或 Tomcat 那样。Node 现在还处于初始阶段,但它发展得很快,可能不久就会出现在您的视野中。 答案来源于网络

养狐狸的猫 2019-12-02 02:17:03 0 浏览量 回答数 0

问题

云服务器ECS【问答合集】

马铭芳 2019-12-01 20:19:32 18617 浏览量 回答数 6

问题

nw V0.15 无法发布!?报错

爱吃鱼的程序员 2020-06-09 10:25:21 0 浏览量 回答数 1

问题

云服务器ECS【问答合集】

游客886 2019-12-01 21:30:13 1366 浏览量 回答数 0

问题

利用内存多叉树实现Ext JS中的无限级树形菜单(一种构建多级有序树形结构JSO?400报错

爱吃鱼的程序员 2020-05-31 00:31:27 0 浏览量 回答数 1

回答

概述 App() 代表顶层应用,管理所有页面和全局数据,以及提供生命周期回调等。它 也是一个构造方法,生成 App 实例。 一个小程序就是一个 App 实例。 每个小程序顶层一般包含三个文件。  app.json:应用配置  app.js:应用逻辑  app.acss:应用样式(可选) 简单示例 一个简单的 app.json 代码如下: "pages": [ "pages/index/index", "pages/logs/logs" ], "window": { "defaultTitle": "Demo" } } 这段代码配置指定小程序包含两个页面(index 和 logs),以及应用窗口的默认 标题设置为 “Demo”。 一个简单的 app.js 代码如下: onLaunch(options) { // 第一次打开 }, onShow(options) { // 小程序启动,或从后台被重新打开 }, onHide() { // 小程序从前台进入后台 }, onError(msg) { // 小程序发生脚本错误或 API 调用出现报错 console.log(msg); }, globalData: { // 全局数据 name: 'alipay', }, }); 26 app.json 全局配置 app.json 用于对小程序进行全局配置,设置页面文件的路径、窗口表现、多 tab 等。 以下是一个基本配置示例: "pages": [ "pages/index/index", "pages/logs/index" ], "window": { "defaultTitle": "Demo" } } 完整配置项如下: 属性 类型 是否必填 描述 pages Array 是 设置页面路径 window Object 否 设置默认页面的窗 口表现 tabBar Object 否 设置底部 tabbar 的表现 pages app.json 中的 pages 为数组属性,数组中每一项都是字符串,用于指定小程序 的页面。在小程序中新增或删除页面,都需要对 pages 数组进行修改。 pages 数组的每一项代表对应页面的路径信息,其中,第一项代表小程序的首 页。 页面路径不需要写任何后缀,框架会自动去加载同名的 .json、.js、.axml、.acss 文件。举例来说,如果开发目录为: │ ├──index │ │ ├── index.json │ │ ├── index.js │ │ ├── index.axml │ │ └── index.acss │ ├──logs │ │ ├── logs.json │ │ ├── logs.js │ │ └── logs.axml ├── app.json ├── app.js └── app.acss app.json 中应当如下配置: { "pages":[ "pages/index/index", "pages/logs/logs" ] } window window 用于设置小程序的状态栏、导航条、标题、窗口背景色等。 示例代码: { "window":{ "defaultTitle": "支付宝接口功能演示" } } 属性 类型 是否必 填 描述 最低版本 defaultTitle String 否 页面默认标题 - pullRefresh String 否 是否允许下拉刷新。默认 NO, 备注:下拉刷新生效的 前提是 allowsBounceVertical 值 为 YES allowsBounceV ertical String 否 是否允许向下拉拽。默认 YES, 支持 YES / NO 28 transparentTitl e String 否 导航栏透明设置。默认 none,支持 always 一直透 明 / auto 滑动自适应 / none 不透明 titlePenetrate String 否 是否允许导航栏点击穿透。 默认 NO,支持 YES / NO showTitleLoadi ng String 否 是否进入时显示导航栏的 loading。默认 NO,支持 YES / NO titleImage String 否 导航栏图片地址 - titleBarColor HexCol or 否 导航栏背景色,十六进制颜 色值(0-255) - backgroundCol or HexCol or 否 页面的背景色,十六进制颜 色值(0-255) - backgroundIm ageColor HexCol or 否 下拉露出显示的背景图底 色,十六进制颜色值(0- 255) - backgroundIm ageUrl String 否 下拉露出显示的背景图链接 - gestureBack String 否 iOS 用,是否支持手势返 回。默认 NO,支持 YES / NO enableScrollBa r Boolea n 否 Android 用,是否显示 WebView 滚动条。默认 YES,支持 YES / NO onReachBotto mDistance Number 否 页面上拉触底时触发时距离 页面底部的距离,单位为 px。相关文档页面事件处理 函数 1.19.0 ,目前 iOS 在 page.json 下设 置无效,只能全 局设置。 29 tabBar 如果你的小程序是一个多 tab 应用(客户端窗口的底部栏可以切换页面),那么 可以通过 tabBar 配置项指定 tab 栏的表现,以及 tab 切换时显示的对应页 面。 注意:  通过页面跳转(my.navigateTo)或者页面重定向(my.redirectTo)所到达的页面,即使 它是定义在 tabBar 配置中的页面,也不会显示底部的 tab 栏。  tabBar 的第一个页面必须是首页。 tabBar 配置项有以下: 属性 类型 是否必填 描述 textColor HexColor 否 文字颜色 selectedColor HexColor 否 选中文字颜色 backgroundColor HexColor 否 背景色 items Array 是 每个 tab 配置 每个 item 配置: 属性 类型 是否必填 描述 pagePath String 是 设置页面路径 name String 是 名称 icon String 否 平常图标路径 activeIcon String 否 高亮图标路径 icon 图标推荐大小为 60×60 px 大小,系统会对传入的非推荐尺寸的图片进行非 等比拉伸或缩放。 示例代码: "tabBar": { 30 "textColor": "#dddddd", "selectedColor": "#49a9ee", "backgroundColor": "#ffffff", "items": [ { "pagePath": "pages/index/index", "name": "首页" }, { "pagePath": "pages/logs/logs", "name": "日志" } ] } } app.acss 全局样式 app.acss 作为全局样式,作用于当前小程序的所有页面。 ACSS 是一套样式语言,用于描述 AXML 的组件样式,决定 AXML 的组件的显 示效果。 为适应广大前端开发者,ACSS 和 CSS 规则完全一致,100% 可以用。同时为更 适合开发小程序,对 CSS 进行了扩充。 ACSS 支持 px,rpx,vh,vw 等单位。 rpx rpx(responsive pixel)可以根据屏幕宽度进行自适应,规定屏幕宽为 750rpx。以 Apple iPhone6 为例,屏幕宽度为 375px,共有 750 个物理像 素,则 750rpx = 375px = 750 物理像素,1rpx = 0.5px = 1 物理像素。 设备 rpx 换算 px(屏幕宽度 / 750) px 换算 rpx(750 / 屏幕宽 度) iPhone5 1rpx = 0.42px 1px = 2.34rpx iPhone6 1rpx = 0.5px 1px = 2rpx iPhone6 Plus 1rpx = 0.552px 1px = 1.81rpx 样式导入 使用 @import 语句可以导入外联样式表,@import 后需要加上外联样式表相对 路径,用;表示结束。 示例代码: .sm-button { padding: 5px; } /** app.acss **/ @import "./button.acss"; .md-button { padding: 15px; } 导入路径支持从 node_modules 目录载入第三方模块,例如 page.acss: @import "./button.acss"; /相对路径/ 32 @import "/button.acss"; /项目绝对路径/ @import "third-party/page.acss"; /第三方 npm 包路径/ 内联样式 组件上支持使用 style、class 属性来控制样式。 style 属性 用于接收动态样式,样式在运行时会进行解析。行内样式不支持!important 优先 级规则。 class 属性 用于接收静态样式,属性值是样式规则中类选择器名(样式类名)的集合,样式类 名不需要带上.,多个类名间以空格分隔。请静态样式写进 class 中,避免将静态 样式写进 style 中,以免影响渲染速度。 选择器 同 CSS3 保持一致。 注意:  .a-, .am- 开头的类选择器为系统组件占用,不可使用。  不支持属性选择器。 全局样式与局部样式  app.acss 中的样式为全局样式,作用于每一个页面。  页面文件夹内的 .acss 文件中定义的样式为局部样式,只作用在对应的页面,并会覆盖 app.acss 中相同的选择器。 本地资源引用 ACSS 文件里的本地资源引用请使用绝对路径的方式,不支持相对路径引用。例 如: /* 支持 / background-image: url('/images/ant.png'); / 不支持 */ background-image: url('./images/ant.png'); 33 app.js 注册小程序 App(object: Object) App() 用于注册小程序,接受一个 Object 作为属性,用来配置小程序的生命周 期等。 App() 必须在 app.js 中调用,必须调用且只能调用一次。 object 属性说明 属性 类型 描述 触发时机 onLaunch Function 生命周期回调:监 听小程序初始化 当小程序初始化完 成时触发,全局只 触发一次 onShow Function 生命周期回调:监 听小程序显示 当小程序启动,或 从后台进入前台显 示时触发 onHide Function 生命周期回调:监 听小程序隐藏 当当前页面被隐藏 时触发,例如跳 转、按下设备 Home 键离开 onError Function 监听小程序错误 当小程序发生 js 错误时触发 onShareAppMessage Function 全局分享配置 - 前台/后台定义:  小程序用户点击右上角关闭,或者按下设备 Home 键离开支付宝时,小程序并不会直接销 毁,而是进入后台。  当用户再次进入支付宝或再次打开小程序时,小程序会从后台进入前台。  只有当小程序进入后台 5 分钟后,或占用系统资源过高,才会被真正销毁。 onLaunch(object: Object) 及 onShow(object: Object) object 属性说明: 属性 类型 描述 34 query Object 当前小程序的 query,从启动参数的 query 字段解析而来 scene number 启动小程序的 场景值 path string 当前小程序的页面地址,从启动参数 page 字段解析而来,page 忽略时默认为首页 referrerInfo Object 来源信息 比如,启动小程序的 schema url 如下: alipays://platformapi/startapp?appId=1999&query=number%3D1&page=x%2Fy%2 Fz  小程序首次启动时,onLaunch 方法可获取 query、path 属性值。  小程序在后台被用 schema 打开,也可从 onShow 方法中获取 query、path 属性值。 App({ onLaunch(options) { // 第一次打开 console.log(options.query); // {number:1} console.log(options.path); // x/y/z }, onShow(options) { // 从后台被 schema 重新打开 console.log(options.query); // {number:1} console.log(options.path); // x/y/z }, }); referrerInfo 子属性说明: 属性 类型 描述 最低版本 appId string 来源小程序 - sourceServiceId string 来源插件,当处于插件运行模式时可见 1.11.0 35 extraData Object 来源小程序传过来的数据。 - 注意:  不要在 onShow 中进行 redirectTo 或 navigateTo 等操作页面栈的行为。  不要在 onLaunch 里调用 getCurrentPages(),因为此时 page 还未生成。 onHide() 小程序从前台进入后台时触发 onHide() 。 示例代码: App({ onHide() { // 进入后台时 console.log('app hide'); }, }); onError(error: String) 小程序发生脚本错误时触发。 示例代码: App({ onError(error) { // 小程序执行出错时 console.log(error); }, }); onShareAppMessage(object: Object) 全局分享配置。当页面未设置 page.onShareAppMessage 时,调用分享会执行 全局的分享设置,具体见 分享 。 globalData 全局数据 App() 中可以设置全局数据 globalData。 示例代码: // app.js App({ globalData: 1 }); getApp 方法 小程序提供了全局的 getApp() 方法,可获取当前小程序实例,一般用于在子页 面中获取顶层应用。 var app = getApp(); console.log(app.globalData); // 获取 globalData 使用过程中,请注意以下几点:  App() 函数中不可以调用 getApp(),可使用 this 可以获取当前小程序实例。  通过 getApp() 获取实例后,请勿私自调用生命周期回调函数。  请区分全局变量及页面局部变量,比如: // app.js App({ //定义全局变量 globalData,在整个 App 中有效 globalData: 1 }); // a.js // 定义页面局部变量 localValue,只在 a.js 有效 var localValue = 'a'; // 获取 app 实例 var app = getApp(); // 拿到全局数据,并改变它 app.globalData++; // b.js // 定义页面局部变量 localValue,只在 b.js 有效 var localValue = 'b'; // 如果 a.js 先运行,globalData 会返回 2 console.log(getApp().globalData); a.js 和 b.js 两个文件中都声明了变量 localValue,但并不会互相影响,因为各 个文件声明的局部变量和函数只在当前文件下有效。 内容来源:https://developer.aliyun.com/article/756818?spm=a2c6h.12873581.0.dArticle756818.26162b70Su1GZy&groupCode=tech_library

KaFei 2020-04-27 13:54:36 0 浏览量 回答数 0

回答

概述 在使用消息队列Kafka版时,客户端可能报错,您可以根据报错消息匹配对应的解决方案。 详细信息 报错信息对应的详细信息如下。 报错信息 客户端语言类型 报错原因 解决方案 TimeoutException Java 网络问题 客户端鉴权(sasl.mechanisms)失败 说明 该报错仅出现在消息队列Kafka版的公网实例中。 确保servers配置正确。 通过telnet命令排除网络问题。 如果网络正常,请参考如下内容,确认鉴权正常。 RAM主子账号授权 消息队列Kafka版Demo库 说明 该方案仅适用于消息队列Kafka版的公网实例。 run out of brokers Go Authentication failed for user Python Leader is not available 所有 Topic初始化时会短暂报该错误。如果持续报错,可能是因为没有创建Topic。 登录消息队列Kafka版的控制台。 检查Topic是否已经创建。 如果未创建,请先创建Topic。具体信息,请参见创建Topic。 leader is in election array index out of bound exception Java Spring Cloud会按自己的格式解析消息内容。 参考如下两种解决方法。 推荐同时使用Spring Cloud发送和消费。 如果您使用其他方式发送,例如,调用Kafka原生Java客户端发送,通过Spring Cloud消费时,需要设置headerMode为“raw”,即禁用解析消息内容。 具体信息,请参见Spring Cloud 官网。 No such configuration property: "sasl.mechanisms" C++ 包装C++的客户端,例如,PHP、Node.js等。 SASL和SSL模块未安装或安装异常。 参考如下命令安装SASL和SSL模块。 说明 此处以CentOS系统为例,其他系统请查阅相关官网或者第三方搜索引擎。 安装SSL:sudo yum install openssl openssl-devel 安装SASL:sudo yum install cyrus-sasl{,-plain} No worthy mechs found No KafkaClient Entry Java 未找到kafka_client_jaas.conf配置文件。 准备好 kafka_client_jaas.conf文件,放在任意目录下,这里假设为/home/admin。Java的安全登录设置是系统性的,有如下两种设置方法。 设置系统变量 通过设置JVM参数:-Djava.security.auth.login.config=/home/admin/kafka_client_jaas.conf 通过代码设置:System.setProperty("java.security.auth.login.config","/home/admin/kafka_client_jaas.conf") 注意 如果在代码中设置,一定要保证代码在启动Kafka客户端之前执行。 配置系统文件:在${JAVA_HOME}/jre/lib/java.security中增加内容:login.config.url.1=file:/home/admin/kafka_client_jaas.conf。 更多信息,请参见 Oracle JAAS Login Configuration File。 Error sending fetch request Java Consumer拉取消息失败报错,可能的原因如下。 网络问题 拉取消息超时 确保servers配置正确。 通过telnet命令排除网络问题。 如果网络正常,可能是拉取消息超时引起。可以尝试调整下列两个参数,限制单次拉取的消息量。 fetch.max.bytes:单次拉取操作,服务端返回的最大Bytes。 max.partition.fetch.bytes:单次拉取操作,服务端单个Partition返回的最大Bytes。 服务端流量限制,可以在消息队列Kafka版控制台的实例详情页面查看相应内容。 VPC访问时查看峰值流量。 公网访问时查看公网流量。 DisconnectException 适用于 消息队列 Kafka 版 如果您的问题仍未解决,您可以在阿里云社区免费咨询,或提交工单联系阿里云技术支持。

保持可爱mmm 2020-03-28 18:39:52 0 浏览量 回答数 0

问题

程序员报错QA大分享(1)

问问小秘 2020-06-18 15:46:14 8 浏览量 回答数 1

回答

教程资源类 freeCodeCamp/freeCodeCamp 免费代码训练营 EbookFoundation/free-programming-book 免费编程图书 sindresorhus/awesome awesome 列表的列表。这个项目起源于某个人做了一个 awesome-php 的 php 优质资源 列表,然后大家就做了 awesome-python,awesome-vue 等各种列表,这个项目又把 各种 awesome 列表收集了起来。 CyC2018/CS-Notes 国人编写的计算机基础教程,中文 jwasham/coding-interview-university 面试考点总结 h5bp/Front-end-Developer-Interview-Questions 前端工程师面试问题 vinta/awesome-python Python 的一些优质资源. 前面提到的 awesome 系列列表,不再赘述 airbnb/javascript Airbnb 的 js 编码规范,值得参考。 github/gitignore GitHub 提供的各种项目的 gitignore 文件模板,省了自己写了 getify/You-Dont-Know-JS 前端(JS)的一些坑的总结 vuejs/awesome-vue Vue 的一些优质资源. awesome 系列,不再赘述 前端 UI 框架/库 twbs/bootstrap Twitter 推出的前端 UI 框架,有网格系统和各种组件,曾经常年在 GitHub 上排名第一,可以说是后端工程师画界面的利器。 竞品:Semantic UI, pure-css FontAwesome/Font-Awesome 字体和图标库,可以使用 SVG 和字体等等多种格式。 ant-design/ant-design 蚂蚁金服出的 react/vue 组件库,前一阵大名鼎鼎的“圣诞彩蛋”就是这个库搞得。主要 提供 React 的组件库,用于企业中后端的后台的建设。关于 React/Vue 和前端的组 件化是一个很有意思的话题,可以查阅相关资料。 和 Bootstrap 等的区别在于,Bootstrap 更偏向于 UI 方面,是 CSS 框架,而 antd 则是完整的包括 UI 和功能在内的 React 组件。可以理解为 Bootstrap 只做了“皮”, 而 antd 是 “皮” + “骨”。 Semantic-Org/Sematic-UI 和 Bootstrap 类似的一个组件库。Semantic UI 更强调使用语义化的 class 来定义样式 google / material-design-icons Google 推出的 Material 风格图标库。 daneden/animate.css CSS 动画效果库 大前端框架和库 vuejs/vue Vue 是国人推出的一个前端框架,可以通过写不同的 Vue 组件来组成一个完整的应用, 支持服务端渲染(SSR)。和 React 一样,Vue 也使用了 Virtual-DOM 技术来提高性能。 facebook/react facebook 推出的一个前端框架,特点是每个组件的 HTML/JS/CSS 组合在一起,使用 Virtual-DOM 渲染。在 React 出现之前,前端框架普遍采用了后端广泛使用的 MVC 模式,强调 HTML/JS/CSS 三者要分离,而 React 则反其道而行之,强调从组件构建, 可以说 React 的出现是前端界的一场革命。 facebook/react-native 使用 React 的语法来构建 native app,注意这里并不是使用一个 iOS 或者 Android 的 WebView 中嵌套了一个 webapp,而是直接使用 JS 来操作原生组件。 angular/angular.js Google 推出的前端框架,没用过 reactjs/redux react.js 的一个组件,用来管理数据。 meteor/meteor 前几年火过一阵,号称要统一前后端,然而我从来没搞明白到底是干啥的,如今热度已经 大减了。HN 上甚至直接有人问 Is meteor.js dead? webpack/webpack 用于打包前端资源 chartjs/Chart.js 前端数据可视化组件 electron 可以使用前端的工具链来编写桌面应用,同时能够跨平台。 jQuery 老牌的跨浏览器兼容库。随着浏览器的发展,现在使用 jQuery 的越来越少了。 create-react-app 用来构造 react app 的辅助工具。 d3.js 前端数据可视化组件 后端工具 elasticsearch 使用 Java 编写的一个搜索工具,要实现全文搜索的话,选择 ES 就对了。 moby Docker 的内核. Docker 可以让你打包应用的所有环境, 像虚拟机一样隔离, 但是又不像虚拟机 一样过多消耗资源. 库 ReactiveX/RxJava TODO 一种编程模式,现在还不是很了解。 机器学习 TensorFlow Google 推出的深度学习库, 目前占主流地位. 语言 Microsoft/TypeScript 微软推出的一个 JavaScript 的超集。我们知道 JavaScript 是一个动态弱类型的语言, 这种特性在小项目上很方便,然而随着前端项目越来越大,强类型对于程序正确性的保证 就显得越来越重要了。TypeScript 重点就在于增强了类型,甚至名字都叫 TypeScript。 强类型的语言是近年来语言的发展趋势,新语言诸如 Rust、Go、Swift 都是强类型的 语言。而一些老语言,比如 Python 也加入了 Type Hint 的功能来增强类型支持。 Apple/swift Apple 推出的新语言,用来代替 Obj-C。 golang Google 推出的编程语言。特点是通过 Goroutine 支持高并发。 nodejs 可以在服务器上运行的 js。 通用工具类 hakimel / reveal.js 使用 js 来做 PPT 的一个框架或者说工具 GoogleChrome/puppeteer Google 推出的操作 Chrome 浏览器的 node.js API。可以用在自动化测试和爬虫等领域。 官方 API 的推出基本上意味着第三方工具已经失去意义了。比如说 Phantom.js 直接宣 布停止维护了。 atom GitHub 推出的一个代码编辑器。 oh-my-zsh zsh 的增强组件集,可以让你的 shell 异常强大, 建议刚学命令行的可以体验一下. vscode 微软推出的代码编辑工具,目前占据了市场优势地位。 Web 框架 rails Ruby 的一个 MVC 模式的 web 框架,当年可谓大红大紫,现在似乎热度有所衰减了, 可能是因为大家都不写 Web 应用了。 expressjs Node.js 的一个 Web 框架。 http://socket.io 实现 WebSocket 的一个库,使用 node.js 编写。WebSocket 是在浏览器和服务器之间 实现全双工通信的一个协议。 laravel 一个比较现代的 PHP MVC web 框架,不过 PHP 这几年的热度衰减也很厉害,好多搞 PHP 的都直接转 Go 了。 内核 torvalds/linux 这个不用说了吧。评论里提到 Linux 的贡献者在 GitHub 上显示为正无穷, 厉害了.

有只黑白猫 2020-01-15 16:53:45 0 浏览量 回答数 0

问题

【Java学习全家桶】1460道Java热门问题,阿里百位技术专家答疑解惑

管理贝贝 2019-12-01 20:07:15 27612 浏览量 回答数 19

回答

内核优化 编辑   /etc/sysctl.conf net.ipv4.ip_forward = 0net.ipv4.conf.default.rp_filter = 1net.ipv4.conf.default.accept_source_route = 0kernel.sysrq = 0kernel.core_uses_pid = 1net.ipv4.tcp_syncookies = 1kernel.msgmnb = 65536kernel.msgmax = 65536kernel.shmmax = 68719476736kernel.shmall = 4294967296net.ipv4.tcp_max_tw_buckets = 6000net.ipv4.tcp_sack = 1net.ipv4.tcp_window_scaling = 1net.ipv4.tcp_rmem = 4096 87380 4194304net.ipv4.tcp_wmem = 4096 16384 4194304net.core.wmem_default = 8388608net.core.rmem_default = 8388608net.core.rmem_max = 16777216net.core.wmem_max = 16777216net.core.netdev_max_backlog = 262144net.core.somaxconn = 262144net.ipv4.tcp_max_orphans = 3276800net.ipv4.tcp_max_syn_backlog = 262144net.ipv4.tcp_timestamps = 0net.ipv4.tcp_synack_retries = 1net.ipv4.tcp_syn_retries = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_mem = 94500000 915000000 927000000net.ipv4.tcp_fin_timeout = 1net.ipv4.tcp_keepalive_time = 30net.ipv4.ip_local_port_range = 1024 65000 再输入 /sbin/sysctl -p 使其生效 Conf 设置 worker_processes 2 # 2 就是服务器的核心数worker_cpu_affinity 01 10 # 填法和服务器的线程数相关,一般云服务器/vps 线程和核心数是一致的,具体写法不展开。 如果是 tengine 的话,后面直接填 auto 即可。 worker_connections  #用高效的event驱动,可以获得最大性能 其他的参数最好根据你的服务器配置进行调整,以避免 502 的产生。 TCP 优化 http { sendfile on; tcp_nopush on; tcp_nodelay on;keepalive_timeout 60; 第一行的 sendfile 配置可以提高 Nginx 静态资源托管效率。sendfile 是一个系统调用,直接在内核空间完成文件发送,不需要先 read 再 write,没有上下文切换开销。 TCP_NOPUSH 是 FreeBSD 的一个 socket 选项,对应 Linux 的 TCP_CORK,Nginx 里统一用 tcp_nopush 来控制它,并且只有在启用了 sendfile 之后才生效。启用它之后,数据包会累计到一定大小之后才会发送,减小了额外开销,提高网络效率。 TCP_NODELAY 也是一个 socket 选项,启用后会禁用 Nagle 算法,尽快发送数据,可以节约 200ms。Nginx 只会针对处于 keep-alive 状态的 TCP 连接才会启用 tcp_nodelay。 ------------------------- Socket 连接 php-fpm修改 php-fpm.conf将listen = 127.0.0.1:9000改为listen = /dev/shm/php-cgi.sock修改 nginx.conflocation ~ .*\.(php|php5)?$ { #fastcgi_pass 127.0.0.1:9000; fastcgi_pass unix:/dev/shm/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; }事后不要忘记重启就好。反代优化Nginx 安装时,或者升级时编译 ngxcachepurge 组件以反代 Node.js 应用 Ghost 为例:server {     server_name domain.com;   add_header X-Cache $upstream_cache_status;   location / {        proxy_cache STATIC;        proxy_cache_valid 200 30m;        proxy_cache_valid 404 1m;        proxy_pass http://127.0.0.1:2368;        proxy_ignore_headers X-Accel-Expires Expires Cache-Control;        proxy_ignore_headers Set-Cookie;        proxy_hide_header Set-Cookie;        proxy_hide_header X-powered-by;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        proxy_set_header Host $http_host;        expires 10m;    }    location /content/images {        alias /path/to/ghost/content/images;        access_log off;        expires max;    }    location /assets {        alias /path/to/ghost/content/themes/uno-master/assets;        access_log off;        expires max;    }    location /public {        alias /path/to/ghost/core/built/public;        access_log off;        expires max;    }    location /ghost/scripts {        alias /path/to/ghost/core/built/scripts;        access_log off;        expires max;    }    location ~ ^/(?:ghost|signout) {         proxy_set_header X-Real-IP $remote_addr;        proxy_set_header Host $http_host;        proxy_pass http://127.0.0.1:2368;        add_header Cache-Control "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0";    }}HTTP/2 + 优化因为 Nginx 稳定支持HTTP/2 的 1.10 版本还没有出,所以暂时不写。可以先参考 SPDY:或许是 Nginx 下 SPDY 配置最实际的教程开启 Gzip对于文本文件,在服务端发送响应之前进行 GZip 压缩也很重要,通常压缩后的文本大小会减小到原来的 1/4 - 1/3。http { gzip on; gzip_vary on; gzip_comp_level 6; gzip_buffers 16 8k; gzip_min_length 1000; gzip_proxied any; gzip_disable "msie6";gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript; ... ...}PageSpeed 优化缓存——让你应用的数据和逻辑完全避免使用网络减少回应时间——减少一连串请求-响应周期的数量减小请求大小——减少上传大小减小有效负荷大小——减小响应、下载和缓存页面的大小优化浏览器渲染——改善浏览器的页面布局 谷歌推出的很好很强大的优化软件,由于篇幅有限,所以请自行搜索安装教程 来自: https://www.vobe.io/378

妙正灰 2019-12-01 23:30:49 0 浏览量 回答数 0

问题

《手把手安装Cloudify 3.1》?报错

爱吃鱼的程序员 2020-06-14 16:29:34 0 浏览量 回答数 1

问题

一个activiti集成的问题,求助各位大神?报错

爱吃鱼的程序员 2020-06-06 10:55:10 0 浏览量 回答数 1

回答

函数计算目前原生支持的开发语言有 nodejs, python, java, php 和 c#, 在实现这些开发语言 runtime 的时候, 函数计算开发团队花了很大的精力去让各自语言的传统应用能够简单快速迁移到函数计算平台: nodejs 开发函数计算的正确姿势——移植 Express python , 支持 WSGI 协议的框架可以一键迁移到函数计算 部署基于 python wsgi web 框架的工程到函数计算 十分钟上线-在函数计算上部署基于django开发的个人博客系统 java Java Http 触发器极速迁移传统 Spring 应用 php 一元建站-基于函数计算 + wordpress 构建 serverless 网站 C# 十分钟上线-基于函数计算开发 Restful web api & asp.net core web app 如上述所列的各自语言的传统应用迁移到函数计算的迁移方案, 虽然已经足够简单, 但是还是需要去理解一下函数计算的接口以及各自语言在函数计算环境中运行起来的原理, 比如 python, 用户需要理解 WSGI 协议, 然后才编写一个符合要求的入口函数。 为了彻底解放生产力, Custom Runtime 应运而生, Custom Runitme 可以解决以下两个重要需求: 可以随心所欲持定制个性化语言执行环境(例如 golang、lua、ruby)以及各种语言的小版本(例如python3.7、Nodejs12)等,打造属于自己的自定义runtime 现有的 web 应用或基于传统开发 web 项目基本不用做任何改造,即可将项目一键迁移到函数计算平台 用户要实现一个最简单的 Custom runtime,只要符合以下两条: 创建一个http server,监听在固定端口(端口可以读取环境变量 FC_SERVER_PORT,默认为 9000) http server 需要在 15s 内完成启动 接下来, 我们梳理一下基于 Custom Runtime 一键迁移案例。 custom 实现注意细节: Custom Runtime 启动的服务一定监听 0.0.0.0:9000 或者 *:9000 端口,不用使用127.0.0.1:9000, 会导致请求超时。{“ErrorCode”:”FunctionNotStarted”,”ErrorMessage”:”The CA’s http server cannot be started:ContainerStartDuration:25000000000. Ping CA failed due to: dial tcp 21.0.5.7:9000: getsockopt: connection refused Logs : 2019-11-29T09:53:30.859837462Z Listening on port 9000\r\n”} Custom Runtime 的 bootstrap 一定需要添加 #!/bin/bash,不然会遇见如下错误{“ErrorCode”:”CAExited”,”ErrorMessage”:”The CA process either cannot be started or exited:ContainerStartDuration:25037266905. CA process cannot be started or exited already: rpc error: code = 106 desc = ContainerStartDuration:25000000000. Ping CA failed due to: dial tcp 21.0.7.2:9000: i/o timeout Logs : 2019-11-29T07:27:50.759658265Z panic: standard_init_linux.go:178: exec user process caused \”exec format error\” bootstrap 一定需要可执行权限 bootstrap 代码一定要执行到 http server 启动成功的逻辑, 不能被前面的逻辑阻塞, 比如启动server之前, 尝试连接一个不可达的数据库,造成启动时间 timeout http server 的实现 connection keep alive, request timeout 至少10分钟以上 案例 java Serverless 实战 —— 快速搭建 SpringBoot 应用 Serverless 实战 —— 移植 spring-petclinic 到函数计算 python import tornado.ioloop import tornado.web import os class MainHandler(tornado.web.RequestHandler): def get(self): rid = self.request.headers.get('x-fc-request-id',None) print("FC Invoke Start RequestId: " + str(rid)); # your logic self.write("GET: Hello world") print("FC Invoke End RequestId: " + str(rid)); def post(self): rid = self.request.headers.get('x-fc-request-id',None) print("FC Invoke Start RequestId: " + str(rid)); # your logic self.write("GET: Hello world") print("FC Invoke End RequestId: " + str(rid)); def make_app(): return tornado.web.Application([ (r"/.*", MainHandler), ]) if name == "main": app = make_app() port = os.environ.get("FC_SERVER_PORT", "9000") app.listen(int(port)) tornado.ioloop.IOLoop.current().start() 本地安装第三方包 tornado 然后编写一个具有可执行权限的名字为bootstrap (注:#!/bin/bash注释是必需的)文件启动上面代码的 http server: #!/bin/bash python server.py go 基于custom runtime 打造 golang runtime nodejs 'use strict'; var express = require('express'); var app = express(); var crypto = require('crypto'); app.post(/.*/, function (req, res) { var rid = req.headers["x-fc-request-id"]; console.log(FC Invoke Start RequestId: ${rid}); // your logic, for example, get hash var secret = 'abcdefg'; var hash = crypto.createHmac('sha256', secret) .update('I love cupcakes') .digest('hex'); // c0fa1bc00531bd78ef38c628449c5102aeabd49b5dc3a2a516ea6ea959d6658e console.log(hash); res.send(hash); console.log(FC Invoke End RequestId: ${rid}); }); var port = process.env.FC_SERVER_PORT || 9000 app.listen(port, function () { console.log("FunctionCompute custom-nodejs runtime inited."); }); app.timeout = 0; // never timeout app.keepAliveTimeout = 0; // keepalive, never timeout 本地安装第三方包 express 然后编写一个具有可执行权限的名字为bootstrap (注:#!/bin/bash注释是必需的)文件启动上面代码的 http server: #!/bin/bash node server.js php 基于custom runtime + nginx + php-fpm 运行 wordpress:customruntime-php .NETCORE CSharp .Net Core 2.1 MVC Web应用迁移到函数计算 custom runtime 教程同样适用于 .netcore 3.0

1934890530796658 2020-03-27 16:29:17 0 浏览量 回答数 0

问题

nodejs异步IO的实现? 400 报错

爱吃鱼的程序员 2020-05-29 20:16:19 0 浏览量 回答数 1
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 云栖号物联网 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 云栖号弹性计算 阿里云云栖号 云栖号案例 云栖号直播