Node.js + Nginx搭建基于websocket的、可扩展的消息中心

前言:最近需要搭个可扩展的聊天室环境,倒腾了半天,整理出了这么个方案。这个方案满足下列需求:

⑴ 基于websocket通讯。

⑵ node.js server作为deamon进程在后台一直运行。

⑶ socket server可通过增加服务器的形式横向扩展。

小编本人搞技术的,做事力求直击要害,言简意赅,所以把主要的步骤说明了下。需要详细了解的请看文章底部的“参考”。

1. 安装nodejs

⑴ 准备工作

yum -y install gcc make gcc-c++ openssl-devel wget

⑵ 下载&解压

cd /opt/src

wget http://nodejs.org/dist/v0.10.10/node-v0.12.10.tar.gz
tar -zvxf node-v0.12.10.tar.gz

⑶ 编译安装

./configure

./make && make install

⑷ 验证是否安装配置成功

node -v

2. 使用Node.js+Socket.IO搭建WebSocket实时应用

⑴ 在/var/www/html/ping目录下执行下面的命令

npm install --save expressnpm

install --save socket.io

安装成功后,应该可以看到工作目录下生成了一个名为node_modules的文件夹,里面分别是express和socket.io,接下来可以开始编写服务端的代码了,新建一个文件:index.js:

var app = require(‘express‘)();

var http = require(‘http‘).Server(app);

var io = require(‘socket.io‘)(http);

app.get(‘/‘, function(req, res){

res.send(‘<h1>Welcome Realtime Server</h1>‘);

});

http.listen(3000, function(){

console.log(‘listening on *:3000‘);

});

⑵ 运行nodejs

命令行运行node index.js,如果一切顺利,你应该会看到返回的listening on *:3000字样,这说明服务已经成功搭建了。此时浏览器中打开http://localhost:3000应该可以看到正常的欢迎页面。

如果你想要让服务运行在线上服务器,并且可以通过域名访问的话,可以使用Nginx做代理,在nginx.conf中添加如下配置,然后将域名(比如:realtime.plhwin.com)解析到服务器IP即可。

server

{

listen       80;

server_name  realtime.plhwin.com;

location / {

proxy_pass http://127.0.0.1:3000;

}

}

3. Websocket Server集群的搭建

使用ngix反向代理方案。这种方案比较简单不需要修改业务代码可以直接布署,通过iphash轮调算法保存用户分配到同一个进程。

vi /etc/nginx/conf/nginx.conf

http {

upstream io_nodes {

ip_hash;

server 127.0.0.1:6001;

server 127.0.0.1:6002;

server 127.0.0.1:6003;

server 127.0.0.1:6004;

}

server {

listen 3000;

server_name io.yourhost.com;

location / {

#为支持转发WebSocket数据,加上upgrade头

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection "upgrade";

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header Host $host;

proxy_http_version 1.1;

proxy_pass http://io_nodes;

}

}

}

4. forever让node.js在后台一直跑

⑴ 安装forever

npm install forever -gd

⑵ 运行Forever

forever --help

forever start server.js

forever stop server.js

参考:

1. 《Centos 安装 NodeJS》

http://www.cnblogs.com/hamy/p/3632574.html

2. 《centos6.5编译安装nodejs》

http://blog.sina.com.cn/s/blog_6722ab160102vtvb.html

3. 《使用Node.js+Socket.IO搭建WebSocket实时应用》

http://www.plhwin.com/2014/05/28/nodejs-socketio/

5. 《Socket.io的集群方案》

http://www.open-open.com/lib/view/open1447034396335.html

6. 《node.js应用后台守护进程管理器Forever安装和使用实例》

http://www.jb51.net/article/50543.htm

时间: 2024-10-06 20:24:20

Node.js + Nginx搭建基于websocket的、可扩展的消息中心的相关文章

基于Node.js + socket.io实现WebSocket的聊天DEMO

原文摘自我的前端博客,欢迎大家来访问 http://hacke2.github.io 简介 最近看Node.js和HTML5,练手了一个简易版的聊天DEMO,娱乐一下 为什么需要socket.io? node.js提供了高效的服务端运行环境,但是由于浏览器端对HTML5的支持不一, 为了兼容所有浏览器,提供卓越的实时的用户体验,并且为程序员提供客户端与服务端一致的编程体验, 于是socket.io诞生. 简答来说socket.io具体以下特点: 1.socket.io设计的目标是支持任何的浏览器

paip.最好的脚本语言node js 环境搭建连接mysql

6.4 一些说明 数据属性可以重写同名的方法属性.这是为了避免在大型系统中产生问题的意外名称冲突.所以用一些减少冲突的常用方法是很有效果的.常用的方法包括:大写字母方法名称,用唯一的字符串来做为数据属性的名称(可以是个下划线_)或者用动词命名方法和用名字命名数据属性. 数据属性就像和对象的普通用户一样可以被方法引用.换句话说,类不能用来实现纯净的数据类型.事实上,在python中不能强制数据隐藏,一切基于约定.(另一方面,如C中写的,python的实现可以做到完全隐藏实现细节并且在必要是可以控制

Node.js环境搭建&amp;&amp;npm安装

Node.js环境搭建 第一步:进入官网,然后直接点击左边的下载左边的部分,因为其提示 “Recommended For Most Users”. 第二步:下载得到的是msi文件,直接双击安装,一路next即可安装完成. 第三步:这时,我们就可以在“开始”中找到最新添加了两项内容,可以创建快捷方式到桌面上方便使用.如图: 第四步:安装完成后,按下win+R ,然后输入cmd后进入dos窗口,直接输入 node -v,这时我们可以看到你所安装的版本号,表示安装成功,如下所示: 第五步:npm安装.

用Node.JS+MongoDB搭建个人博客(安装环境)(一)

Node.JS是什么? Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. Node.js是由C++开发的,其实是一个JS运行环境,可以让JavaScript运行在服务器上. 安装环境 安装Node.JS和NPM 首先进入NodeJS官网选择自己对应的系统下载最新版,我现在用的是window64位系统,所以选择了window64位版的msi文件.下载完成后安装 安装成功后检查是否

node.js 环境搭建

一 官网下载安装包 : 1.http://www.nodejs.org/download/ 选择相应的包进行安装 2.安装express : npm install -g express -generator 二 测试安装情况 在cmd 中输入 node -version 如果显示版本说明安装成功 在cmd中输入 npm --version 如果显示版本说则说明 包管理器安装成功 三 安装模块 在CMD 中 依次输入 mkdir my-project cd my-project npm inst

在Node.js上搭建React.js开发环境

1.React.js的介绍: React 是一个用于构建用户界面的 JAVASCRIPT 库. React主要用于构建UI,很多人认为 React 是 MVC 中的 V(视图). React 起源于 Facebook 的内部项目,用来架设 Instagram 的网站,并于 2013 年 5 月开源. React 拥有较高的性能,代码逻辑非常简单,越来越多的人已开始关注和使用它. 特点: 1.声明式设计 ?React采用声明范式,可以轻松描述应用. 2.高效 ?React通过对DOM的模拟,最大限

使用Node.js快速搭建WebSocket server

安装 npm install ws 服务端 server.js var WebSocketServer = require('ws').Server   , wss = new WebSocketServer({port: 8080}); wss.on('connection', function(ws) {     ws.on('message', function(message) {         console.log('received: %s', message);     });

Hello Node.js之搭建一个web服务器

Node.js简述 Nodejs 是JavaScript运行时,解释器是C/C++写的,基于ChromeV8引擎, 事件驱动,非阻塞I/O模型.本系列目前参考了Node.js官网,慕课网Scott的Node.js基础,<Node即学即用>图灵系列,以及可能的网上公开资源. Nodejs包管理器是npm 包就是别人写好的库. Nodejs提供了fs,http等内置对象,操作磁盘文件.搭建服务器. 特征:单线程.事件驱动.异步非阻塞I/O模型. Node.js安装 官网安装Node.js,自带np

创业笔记-Node.js入门之基于事件驱动的回调

基于事件驱动的回调 这个问题可不好回答(至少对我来说),不过这是Node.js原生的工作方式.它是事件驱动的,这也是它为什么这么快的原因. 你也许会想花点时间读一下Felix Geisendörfer的大作Understanding node.js,它介绍了一些背景知识. 这一切都归结于“Node.js是事件驱动的”这一事实.好吧,其实我也不是特别确切的了解这句话的意思.不过我会试着解释,为什么它对我们用Node.js写网络应用(Web based application)是有意义的. 当我们使