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