zoukankan      html  css  js  c++  java
  • nodejs 建立web服务器

    我的运行环境
    ubuntu 9.10 
    node v0.1.32
    如果你没有Linux环境,可以在windows上装vmware 然后再在上面跑 linux

    1.安装最新nodejs v0.1.32

    获得nodejs 的源码
    wget http://nodejs.org/dist/node-v0.1.32.tar.gz
    tar xzvf node-v0.1.32.tar.gz 
    cd node-v0.1.32 
    ./configure
    make 
    make install
    
    如果安装成功,查看你的node版本号
    node -v 
    


    2.开始nodejs之旅——创建一个http 服务器

    nodejs 本身就包含了http server ,通过 require("http")包含http这个module,你就可以使用http server 了
    var sys = require('sys'),
       http = require('http');
    http.createServer(function (req, res) {
      setTimeout(function () {
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.write('Hello World');
        res.close();
      }, 2000);
    }).listen(8006);
    
    
    sys.puts('Server running at http://127.0.0.1:8006/');


    做web开发的应该对请求和响应了然于胸了,浏览器用户发送一个请求(request),服务器接受这个请求,处理以后返回一个响应(response)。
    nodejs 提供对request和response更低层次的控制。比如你可以给request 添加一个end事件 。就像在浏览器端添加DOM事件那样。嗯,我觉得这很cool!

    var sys = require('sys'),
       http = require('http');
    http.createServer(function (req, res) {
      req.addListener("end",function(){
        sys.puts("request end");
      });
      setTimeout(function () {
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.write('Hello World');
        res.close();
      }, 2000);
    }).listen(8006);
    sys.puts('Server running at http://127.0.0.1:8006/');

    在终端上可以看到

    浏览器上可以看到

    为什么要延迟两秒才向返回信息呢,完全没必要嘛(我这个例子是在API里抄的)

    var sys = require('sys'),
       http = require('http');
    http.createServer(function (req, res) {
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.write('Hello World');
        res.close();
    }).listen(8006);
    sys.puts('Server running at http://127.0.0.1:8006/');
    

    所以去掉setTimeout,依然OK!

    3.事件驱动的服务器端编程


    设想一下吧,在校内上发了一条消息,你怎样让你的消息传递给你的 好友呢?用事件来触发再合适不过了,而JavaScript正是事件驱动的,只需要实现一种事件机制当你发送更新,服务器端接受到这个更新就触发一个事件,向所有你的好友传递这个消息。当然,真正要实现立刻发送到你的好友的浏览器端(他必须是在线的),还需要要长连接,这样才能保证服务器端把消息推送到浏览器端(server push )。

    我觉得那个很费劲,nodejs 的作者就写了一个服务器推(server push )的demo 一个聊天室 。
    大家可以前去观望一下 http://chat.tinyclouds.org/ 其实现是基于轮询(long polling)的方式,虽然比起websocket 来显得不够优雅,但是确实可行。
    websocket 现在还不可用,node.websocket.js 只能用于localhost 。
    聊天室源代码这儿 
    为什么强调这个例子呢?因为nodejs就是为长连接、高并发而生,将来的web世界肯定是实时的! 
    (api 改了好多,运行不了了)
  • 相关阅读:
    2018全球最强物联网公司榜单揭晓
    物联网
    kalman滤波
    自动驾驶
    CAN总线基础
    Linux系统下x86和ARM的区别有哪些?
    算法课笔记系列(七)—— 平摊分析Amortized Analysis
    深入理解Linux内存分配
    linux内核--自旋锁的理解
    DMA(直接存储器存取)
  • 原文地址:https://www.cnblogs.com/wewe/p/1685658.html
Copyright © 2011-2022 走看看