[英]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應用程序? 我找到了這個stackoverflow答案: 實施可擴展聊天服務器的策略
它說了一些有關負載平衡的內容,在線閱讀並不能理解這個概念。
到目前為止,我只處理過mongoose簡單的CRUD應用程序node.js,但是如果你們可以分享一些知識並分享一些有用的資源,以便在我加深對所有這些知識的基礎上,我將非常努力地工作。技術。
干杯!
Q. Socket.on不帶IO.on
io.on("connection" ... )
收到新的連接時被調用。 Socket.on監聽客戶端的所有發射。 如果您出於某種原因希望客戶端充當服務器,則(簡而言之)是io.on是必需的
問:Redis發布/訂閱與Socket.IO
看看這個SO問題/答案 ,引用;
如果所有客戶端都可以直接訪問redis,那么Redis pub / sub非常有用。 如果您有多個節點服務器,則一台服務器可以向其他服務器推送一條消息。
但是,如果瀏覽器中也有客戶端,則需要其他一些東西來將數據從服務器推送到客戶端,在這種情況下,socket.io很棒。
現在,如果將socket.io與Redis存儲一起使用,socket.io將在內部使用Redis pub / sub在服務器之間傳播消息,並且服務器會將消息傳播給客戶端。
因此,使用帶有Redis存儲庫配置的socket.io的socket.io房間對您來說可能是最簡單的。
如果需要,Redis可以像消息隊列一樣工作。 Redis是一個數據存儲,支持許多數據類型。
問:為什么Nginx使用Node.js
Node.js可以獨立工作,但Nginx處理服務器靜態內容的速度更快。
由於nginx是反向代理,因此服務器配置了nginx來處理所有靜態數據(提供靜態文件,進行重定向,處理SSL證書和提供錯誤頁面。),所有其他請求都發送到node.js
還要查看此Quora帖子: 我應該在沒有nginx的情況下托管node.js項目嗎? 引用:
Nginx可用於減輕Node.js進程的負擔,例如,提供靜態文件,進行重定向,處理SSL證書和提供錯誤頁面。
您可以在沒有Nginx的情況下做所有事情,但這意味着您必須自己編寫代碼,所以為什么不為此使用快速且成熟的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.