需要了解一些关于 socket.io 和 redis 和 nginx 的知识
Need to know something regarding socket.io and redis and nginx
我的目标是构建一个聊天应用程序——类似于 whatsapp
据我了解,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 mongoose 简单的 CRUD 应用程序,但如果你们能分享一些知识和一些有用的资源,我愿意努力工作,这样我就可以加深我对所有这些技术的了解。
干杯!
Q. Socket.on without IO.on
io.on("connection" ... )
收到新连接时调用。 Socket.on 监听客户端的所有发射。如果您出于某种原因希望您的客户端充当服务器,那么(简而言之)是 io.on 是必需的
Q. Redis pub/sub vs Socket.IO
看看这个 SO question/anwer,引用;
Redis pub/sub is great in case all clients have direct access to redis. If you have multiple node servers, one can push a message to the others.
But if you also have clients in the browser, you need something else to push data from a server to a client, and in this case, socket.io is great.
Now, if you use socket.io with the Redis store, socket.io will use Redis pub/sub under the hood to propagate messages between servers, and servers will propagate messages to clients.
So using socket.io rooms with socket.io configured with the Redis store is probably the simplest for you.
如果需要,Redis 可以充当消息队列。 Redis 是一个支持多种数据类型的数据存储。
Q. Why Nginx with Node.js
Node.js 可以独立工作,但 nginx 对服务器静态内容更快。
由于 nginx 是反向代理,因此服务器配置有 nginx 来处理所有静态数据(提供静态文件、进行重定向、处理 SSL 证书和提供错误页面。
) 并且每个其他请求都发送到 node.js
同时检查这个 Quora post:Should I host a node.js project without nginx?
引用:
Nginx can be used to remove some load from the Node.js processes, for example, serving static files, doing redirects, handling SSL certificates and serving error pages.
You can do everything without Nginx but it means You have to code it yourself, so why not use a fast and proven solution for this.
我的目标是构建一个聊天应用程序——类似于 whatsapp
据我了解,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 mongoose 简单的 CRUD 应用程序,但如果你们能分享一些知识和一些有用的资源,我愿意努力工作,这样我就可以加深我对所有这些技术的了解。
干杯!
Q. Socket.on without IO.on
io.on("connection" ... )
收到新连接时调用。 Socket.on 监听客户端的所有发射。如果您出于某种原因希望您的客户端充当服务器,那么(简而言之)是 io.on 是必需的
Q. Redis pub/sub vs Socket.IO
看看这个 SO question/anwer,引用;
Redis pub/sub is great in case all clients have direct access to redis. If you have multiple node servers, one can push a message to the others.
But if you also have clients in the browser, you need something else to push data from a server to a client, and in this case, socket.io is great.
Now, if you use socket.io with the Redis store, socket.io will use Redis pub/sub under the hood to propagate messages between servers, and servers will propagate messages to clients.
So using socket.io rooms with socket.io configured with the Redis store is probably the simplest for you.
如果需要,Redis 可以充当消息队列。 Redis 是一个支持多种数据类型的数据存储。
Q. Why Nginx with Node.js
Node.js 可以独立工作,但 nginx 对服务器静态内容更快。
由于 nginx 是反向代理,因此服务器配置有 nginx 来处理所有静态数据(提供静态文件、进行重定向、处理 SSL 证书和提供错误页面。 ) 并且每个其他请求都发送到 node.js
同时检查这个 Quora post:Should I host a node.js project without nginx? 引用:
Nginx can be used to remove some load from the Node.js processes, for example, serving static files, doing redirects, handling SSL certificates and serving error pages.
You can do everything without Nginx but it means You have to code it yourself, so why not use a fast and proven solution for this.