1. 程式人生 > >文章標題 nginx 實現express 高併發介面

文章標題 nginx 實現express 高併發介面

之前用ssh寫過一個後端服務介面,通過一個api向外部提供天氣預報資料,但是併發量一旦大了,反應時長就會變的很長,也容易爆記憶體不足的問題。後來瞭解到node.js 處理高併發的優勢,就拿java+tomcat 和node.js 做了實驗對比。
整體框架結構為,前端nginx 做反向代理,轉向兩個http server,httpserver 從快取中去讀取資料,並立馬返回,服務端指令碼定時去更新快取中的資料,為確保每一個客戶端訪問的資料的一致性,nginx配置如下。
nginx.conf


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; upstream weather.deyuan.com { ip_hash
; server 192.168.6.120:3000; server 192.168.6.80:3000; } server { listen 83; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://weather.deyuan.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }

express 路由配置:

var express = require('express');
var redis = require('redis');
var util=require("util")
var client = redis.createClient(6379,'127.0.0.1');
var router = express.Router();

/**
 * 本級目錄對應上一級目錄為WeatherApi
 * 為天氣預報相關介面
 */




/* 天氣預報資料介面 引數cityName 為城市名稱      */
router.get('/getData', function(req, res, next) {
    cityName = req.query.cityName;
    client.get(cityName, function (err, reply) {
        res.send(reply);

    });
})

/* 天氣預報Token介面   */
router.get('/getToken', function (req, res,next) {
    var str=util.format('%s=%s&%s=%s', 'host_lbs', 'v.juhe.cn', 'key_lbs','9c6b8aaa4a399952faad5765313849de');
    res.send(str);
})

module.exports = router;