首页 > 技术文章 > 腾讯云会话服务器node+nginx

huangqiming 2017-05-10 17:11 原文

1、除了一个正常的服务器还需要一个会话服务器(websocket),利用node加socket.io来做

2、正常安装Nginx

yum install nginx

3、Nginx的配置内容略微不同(主要server部分修改)

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    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  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen  80;  
	server_name taqing.me www.taqing.me;  

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

	location / {  
	    proxy_pass http://127.0.0.1:8000;  
	}

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

}

4、全局安装node

(1)获得资源(其中一个版本即可)

# 4.x
curl --silent --location https://rpm.nodesource.com/setup_4.x | bash -
# 5.x
curl --silent --location https://rpm.nodesource.com/setup_5.x | bash -
# 0.10
curl --silent --location https://rpm.nodesource.com/setup | bash -

(2)安装

yum install -y nodejs

5、直接在你要启动的服务(***.js)里安装socket.io

npm install socket.io

6、然后就可以大概启动js

(1)启动

node server.js

(2)这里贴上我的测试用js(这里的端口要和nginx配置的端口相同)

/**
 * Created by zcwl123 on 2017/5/9.
 */
var app = require('http').createServer(handler),
    io = require('socket.io').listen(app),
    fs = require('fs');

app.listen(8000);
io.set('log level', 1);//将socket.io中的debug信息关闭

function handler (req, res) {
    fs.readFile(__dirname,function (err, data) {
        if (err) {
            res.writeHead(500);
            return res.end('Error loading index.html');
        }
        res.writeHead(200, {'Content-Type': 'text/html'});
        res.end(data);
    });
}

io.sockets.on('connection', function (socket) {
    socket.emit('news', { hello: 'world' });
    socket.on('my other event', function (data) {
        io.sockets.emit('news', data);
        console.log(data);
    });
});

7、然后回到你的正常服务器,放入你的客户端,这里也贴上我的测试用的(主要这里的外网ip不需要端口)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Ssocket</title>
    <script src="http://119.29.**.***/socket.io/socket.io.js"></script>
</head>

<body>
<div></div>
<input type="text"/>
<button>button</button>
<script type="text/javascript">
    var input = document.getElementsByTagName("input")[0];
    var button = document.getElementsByTagName("button")[0];
    var div = document.getElementsByTagName("div")[0];
    var socket = io.connect('http://119.29.**.***');
    var data;
    socket.on('news', function (data) {
        div.innerHTML=data.my;
        console.log(data);
    });
    button.onclick=function(){
        socket.emit('my other event', { my: input.value });
    };
</script>

</body>
</html>

8、保持node server.js状态下,然后登陆html就可以,就完成websocket了

9、如果要一直node server.js,并且不能退出所以也不算完全完成,下面在安装一个node的forever插件

npm install forever -g

10、下面是forever的一些操作

// 1. 简单的启动
forever start app.js
// 2. 指定forever信息输出文件,当然,默认它会放到~/.forever/forever.log
forever start -l forever.log app.js
// 3. 指定app.js中的日志信息和错误日志输出文件,
//  -o 就是console.log输出的信息,-e 就是console.error输出的信息
forever start -o out.log -e err.log app.js
// 4. 追加日志,forever默认是不能覆盖上次的启动日志,
//  所以如果第二次启动不加-a,则会不让运行
forever start -l forever.log -a app.js
// 5. 监听当前文件夹下的所有文件改动
forever start -w app.js
文件改动监听并自动重启
// 1. 监听当前文件夹下的所有文件改动(不太建议这样)
forever start -w app.js
显示所有运行的服务
forever list
停止操作
// 1. 停止所有运行的node App
forever stopall
// 2. 停止其中一个node App
forever stop app.js
// 当然还可以这样
// forever list 找到对应的id,然后:
forever stop [id]
重启操作
重启操作跟停止操作保持一致。
// 1. 启动所有
forever restartall

 

推荐阅读