騰訊雲會話伺服器node+nginx

kimingw發表於2017-05-10

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

 

相關文章