2014-01-23 64 views
0

我在節點中構建應用程序,使用express來簡化事件和socket.io以進行套接字操作。面向對象風格的應用程序與express.js和socket.io

所以,當我寫我的代碼時,我意識到它的工作原理,但並不是最好的和優雅的解決方案。

我想要做的唯一一件事就是換插座事件的所有代碼,然後在多個頁面請求重用,所以:

app.js

var express = require('express') 
    , io; 

var app = express() 
    , PORT = 7777; 

io = require('socket.io').listen(app.listen(PORT)); 

app.get("/", function (req, res) { 
    io.socket.on('connection', function (socket) { 
    socket.on('user', function() { 

    }); 
    socket.on('message', function() { 

    }); 
    socket.on('getConversation', function (socket) { 

    }); 
    }); 

    res.render('index'); 
}); 

但是如果我想將相同的方法分配給/foo/bar文件,會發生什麼情況?

即我需要以模塊化或面向對象的方式獲取它,儘可能。

有這樣一種模式嗎?

+0

插座通常從路由分隔的,這是沒有意義的有事件監聽器監聽的路線內監聽HTTP連接的WebSocket連接。 – adeneo

+0

那麼,你能舉個例子嗎? –

+0

不,不是真的,因爲它不需要,websockets有自己的連接,所以你不應該把這些連接的事件處理程序放在一個正在等待HTTP連接的事件處理程序中。只需將套接字放在app.get – adeneo

回答

1

您在這裏所做的只是在有人發出頁面請求後,將事件監聽器附加到socket.io。然後,每次請求後,每個請求都會附加新的事件偵聽器,並且每當有人發出頁面請求時,您的服務器都會緩慢開始耗盡內存,因爲您在新事件偵聽器中阻塞它。將socket.io代碼放入路由處理程序是沒有意義的。看看這個:

https://www.npmjs.com/package/express.io

相關問題