2015-09-04 51 views
0

我的目标是建立一个聊天应用 - 类似WhatsApp的要知道关于socket.io和Redis的和nginx的东西

据我了解,socket.io是写在一个实时通信库中的JavaScript和它是使用

例如

// Serverside 
    io.on('connection', function(socket) { 
     socket.on('chat', function(msg) { 
      io.emit('chat', msg); 
     }); 
    }); 

// ClientSide (Using jquery) 

    var socket = io(); 
    $('form').submit(function(){ 
    socket.emit('chat', $('#m').val()); 
    $('#m').val(''); 
    return false; 
    }); 

    socket.on('chat', function(msg){ 
    $('#messages').append($('<li>').text(msg)); 
    }); 

1)我总是需要启动一个io.on('connection')使用实时功能,或者我可以重新使用socket.on对象,而不是很简单呢?例如我有一条路由

app.post('/postSomething', function(req, res) { 
    // Do i need to start an io.on or socket.on here? 

}); 

因为我希望实时功能只能在特定路由上监听。

2)Redis是一个处理pub/sub的数据结构库,为什么我们需要使用pub/sub机制? 我读了很多文章,但无法理解这个概念。第二十例如http://ejosh.co/de/2015/01/node-js-socket-io-and-redis-intermediate-tutorial-server-side/

例如下面

// Do i need redis for this, if so why? is it for caching purposes? 
// Where does redis fit in this code? 


var redis = require("redis"); 
var client = redis.createClient(); 


io.on('connection', function(socket) { 
    socket.on('chat', function(msg) { 
      io.emit('chat', msg); 
     }); 
    }); 

3)只是想知道为什么我需要nginx的规模node.js的应用程序的代码?我发现这个计算器的答案: Strategy to implement a scalable chat server

它说一些关于负载均衡,阅读,网上,无法把握的概念也是如此。

到目前为止,我只处理node.js,猫鼬简单的CRUD应用程序,但我愿意努力工作,如果你们可以分享一些你的知识并分享一些有用的资源,以便我可以加深我的知识关于所有这些技术。

干杯!

+0

你有3个问题;发布他们作为三个单独的问题堆栈溢出,这将帮助你得到答案 –

+0

@BasitAnwer之所以我问一切在一个问题,因为我必须等待90分钟的每个问题 –

+0

@BasitAnwer如果你能帮助我,并回答问题,这将是非常有帮助 –

回答

4

Q. Socket.on没有IO.on

io.on("connection" ...) 

,当你收到一个新的连接调用。 Socket.on监听客户端的所有发射。如果你希望你的客户端充当某种原因,服务器然后(简称)是需要io.on

Q. Redis的发布/订阅VS Socket.IO

乘坐看看这个SO question/anwer,引用;

Redis pub/sub非常适合所有客户端都可以直接访问redis的情况。如果您有多个节点服务器,则可以将消息推送给其他服务器。

但是,如果您在浏览器中也有客户端,则需要其他的东西将数据从服务器推送到客户端,在这种情况下,socket.io非常棒。

现在,如果您使用socket.io与Redis存储套接字。io将使用Redis pub/sub在服务器之间传播消息,服务器会将消息传播到客户端。

因此,使用带有Redis存储配置的socket.io的socket.io客房对您来说可能是最简单的。

如果需要,Redis可以像消息队列那样工作。 Redis是支持许多数据类型的数据存储。

问:为什么用Nginx的Node.js的

Node.js的可以独立工作,但nginx的是更快的服务器静态内容。

由于nginx的是一个反向代理服务器,因此与nginx的配置,以处理所有静态数据(提供静态文件,做重定向,处理SSL证书和服务错误页面。 )和所有其他请求被发送到的node.js

入住这Quora的发布,以及:Should I host a node.js project without nginx? 报价:

Nginx的可以用来从Node.js的过程中除去一些负载,例如,提供静态文件,做重定向,处理SSL证书和提供错误页面。

你可以在没有Nginx的情况下做所有事情,但这意味着你必须自己编写代码,为什么不使用一个快速和经过验证的解决方案。