现在web应用越来越多,大多数利用HTML5技术结合后台API就可以完成。但是有一些场景却需要socket长连接的支持,比如在线即时对话(客服系统),比如游戏在线对战,这两类需求,如果利用ajax轮训机制,服务器负担将随人数增加成倍增长,而且另一方面来说,响应速度也得不到保障(轮训1秒钟一次就很频繁了,而1秒钟的延迟对用户来说体验并不好)!
针对要求及时响应的场景,或者需要服务器通知浏览器的场景,还是用websocket技术解决比较完美,毕竟对于服务器来说,创建1000个socket连接并不难,但1秒钟响应1千次api请求却很吃力,况且大多数时候api根本不会返回有效数据,比如在线对话吧,两个人交流两句话的时间完全可能是数十秒。
websocket可以利用c++实现,当然利用java,python等都可以做到,但对于网站开发人员来说,用nodejs无疑是技术门槛最低的一种方案。话说前头,服务器使用nodejs技术的时候,内存要给够,一个服务器4GB内存不可少吧?如果服务的人数多,给8GB内存甚至更高都是可以的,这是以硬件来换取技术解决的成本。1GB~2GB内存就别跑这么多费内存的服务啦。
先看看nodejs在linux上的部署方法吧,我只说centos上的,因为大多数公司用这个操作系统。操作当然都复制自网上,但我负责任的讲,都是我成功部署的命令:
1、安装nodejs,利用yum
来自:http://blog.csdn.net/xiao_jun_0820/article/details/50838185
64位:
rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
32位:
rpm -ivh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
导入 key(64位,32位都一样):
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
##添加 remi 源并导入 key(64位,32位都一样):
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-remi
安装完成后,执行:
curl --silent --location https://rpm.nodesource.com/setup_5.x | bash -
yum -y install nodejs
2、安装ws模块到全局:
3、npm安装forever到全局:
至此,nodejs,ws模块和forever的环境安装完成。
写一个测试的服务器脚本server.js:
var WebSocketServer = require('ws').Server; var wss = new WebSocketServer({ port: 8080 }); wss.on('connection', function(ws) { ws.on('message', function(message) { console.log(message.code); ws.send('Server Received: [' + message.code + ']' + message.content); }); ws.send('Welcome to rungo node js server!'); });
用nodejs直接运行server.js,由于ws模块安装到全局了,所以运行前必须设置环境变量NODE_PATH:
当然用这种方式运行的话,安装forever就没有意义了,我们要用forever来运行nodejs代码,这样有3个好处:1、程序如果出错自动重启;2、代码如果有变更自动重新加载;3、可以以守护进程方式让程序后台运行。
那么我们利用forever启动server.js吧:
启动相关
// 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
显示所有运行的服务
forever list
停止操作
// 1. 停止所有运行的node App
forever stopall
// 2. 停止其中一个node App
forever stop app.js
// 当然还可以这样
// forever list 找到对应的id,然后:
forever stop [id]
重启操作
重启操作跟停止操作保持一致。
// 1. 启动所有
forever restartall
在项目中上线运行时,应该用如下命令运行(输出普通日志和错误日志):
forever start -l forever.log -o out.log -e err.log app.js
相关推荐
Nodejs+eggjs+mariadb 编写的一套内容管理系统 Nodejs+eggjs+mariadb 编写的一套内容管理系统 Nodejs+eggjs+mariadb 编写的一套内容管理系统 Nodejs+eggjs+mariadb 编写的一套内容管理系统 Nodejs+eggjs+...
图书管理系统,java+express+mongodb+nodejs+gulp.zip 图书管理系统,java+express+mongodb+nodejs+gulp.zip 图书管理系统,java+express+mongodb+nodejs+gulp.zip 图书管理系统,java+express+mongodb+nodejs+...
liunx nodejs+nginx配置收藏版liunx nodejs+nginx配置收藏版
这是一个vue+nodejs+express+mybatis够成的一个项目案例
NodeJS+Vue实现支付宝支付(沙箱)完整流程
Java企业级快速开发平台 前后端分离基于nodejs+vue2+webpack+springboot.zipJava企业级快速开发平台 前后端分离基于nodejs+vue2+webpack+springboot.zipJava企业级快速开发平台 前后端分离基于nodejs+vue2+webpack+...
基于nodejs+mysql实现的仿京东商城app项目 前端 页面结构(H5,CSS3,原生JS) 框架(基于Vue脚手架:vue-cli)进行搭建 数据请求处理框架(Axios) Vue-Router进行路由处理 Vue-LazyLoad进行图片赖加载 服务端 选用NodeJs...
基于HTML5+Nodejs+百度人脸识别音乐播放器的设计与实现.pdf基于HTML5+Nodejs+百度人脸识别音乐播放器的设计与实现.pdf基于HTML5+Nodejs+百度人脸识别音乐播放器的设计与实现.pdf基于HTML5+Nodejs+百度人脸识别音乐...
基于HTML5+Nodejs+百度人脸识别音乐播放器的设计与实现.docx基于HTML5+Nodejs+百度人脸识别音乐播放器的设计与实现.docx基于HTML5+Nodejs+百度人脸识别音乐播放器的设计与实现.docx基于HTML5+Nodejs+百度人脸识别...
本文主要介绍NodeJS+Express+Mysql 实现POST和GET请求的增删改查,后续会在博客发布详细说明,可以关注一下
使用技术:Vue+Nodejs+Mysql+express 基于Vue+Nodejs+的茶叶售卖平台设计与实现 包含完整文件
nodejs + mongodb 资源 合集 01
>本文主要介绍NodeJS+Express+Mysql实现用户登录和注册。此登录注册的方式为get
nodejs+Express+mssql,SQL Server实现增删改查
毕业设计,基于Nodejs+Express+WebSocket开发的网络在线聊天室系统,内含NodeJS完整源代码,数据库脚本 基于Nodejs+Express+WebSocket网络在线聊天室系统设计 开发软件:Vscode,mysql 技术栈:nodejs,express,...
nodejs+angularjs+bootstrap集合的前端框架,导航栏运用到了jquery,可自行去除
nodejs+express+mysql起步学习demo:待完善
基于Nodejs+Vue+elementplus实现的卓越人才选拔系统源码(前端+后端).zip毕业新项目-基于Nodejs+Vue+elementplus实现的卓越人才选拔系统源码(前端+后端).zip毕业新项目-基于Nodejs+Vue+elementplus实现的卓越人才选拔...
基于NodeJS+Express+mongoDB+Bootstrap的全栈式工程化开发前后端分离博客系统实战