zoukankan      html  css  js  c++  java
  • nodejs点滴

    1、推荐一本很不错的介绍书,很短,但是可以一窥nodejs写http服务器的方式

      http://www.nodebeginner.org/index-zh-cn.html

    2、cluster实现模式

      由于node是单进程单线程的方式运行,因此若想发挥多核的优势需要使用进程组的方式进行。

      node之中提供了cluster模块用于实现多进程之间的通讯,进程分成一个主进程与多个从进程。

      对于HTTP服务器,通过child_process.fork进行创建工作进程,因此可以在主从进程之间进行通讯。

      当在从进程调用server.listen时,会将listen的参数序列化后传递给主进程,主进程判断在该端口是否已经有监听的服务,若服务已经存在则直接返回该sockid,否则创建一个返回sockid。

      当有一个客户端连接上来时,会有多个进程调用accept此时有操作系统进行负载均衡,决定由哪个进程最终得到该客户端请求的连接。

      另外需要注意,cluster模块没有任何其他管理进程的功能,因此对进程的管理需要由应用自行处理。

    3、去哪里找当前node支持的模块

      通过github上搜索node,查找到joyent-node那个项目,查看其wiki连接,找到Modules部分,那里有列表。

      https://github.com/joyent/node/wiki/Modules

    4、关于模块信息

      实现require目录的三种情况:1)创建package.json文件,然后在该文件中定义一个main,如下:  

    { "name" : "some-library",
      "main" : "./lib/some-library.js" }
    

      2)当目录下没有package.json文件时,将试着加载index.js, index.node 文件。

      关于exports对象,该对象默认由Modules System创建,但是可以修改。只要直接将该对象重新赋值即可。如:  

    module.exports = new EventEmitter();
    

    5、实现模块的动态加载

      在nodejs之中require加载的模块会进行缓存,也就是调用两次require同样的文件,只会加载一次。

      而为了实现动态加载,需要require去加载文件而不是使用缓存,为了实现该方法,需要将缓存删除后再加载即可。

      delete require.cache[require.resolve("./deal")];
      var deal = require("./deal");
    

      参考网址:http://stackoverflow.com/questions/9210542/node-js-require-cache-possible-to-invalidate

      http://stackoverflow.com/questions/1972242/auto-reload-of-files-in-node-js  

     6、node-gyp找不到v8.h的异常

      可能原因是在node-gyp目录中没有deps目录:找到 ~/.node-gyp/0.10.4 目录,查看目录下是否存在deps,src目录,若没有则可能是由于安装多个的node

    导致,~/.node-gyp/0.10.4 中的 0.10.4 表示当前node的版本。

      解决方法:删除这个目录,然后使用 npm install node-gyp 重新安装即可。

  • 相关阅读:
    filter 静态资源
    getRequestURI,getRequestURL的区别
    基于NodeJs的网页爬虫的构建(二)
    基于NodeJs的网页爬虫的构建(一)
    Reverse Words in a String
    Sum Root to Leaf Numbers
    Search Insert Position
    Wildcard Matching
    Trapping Rain Water
    Gray Code
  • 原文地址:https://www.cnblogs.com/chang290/p/2933951.html
Copyright © 2011-2022 走看看