Node.js 带有express.js和socket.io的面向对象风格应用程序

Node.js 带有express.js和socket.io的面向对象风格应用程序,node.js,oop,express,socket.io,Node.js,Oop,Express,Socket.io,我正在node中构建一个应用程序,使用express简化事情,使用socket.io进行套接字操作 因此,当我在编写代码时,我意识到它是可行的,但并不是最好和优雅的解决方案 我想做的唯一一件事是包装套接字事件的所有代码,然后在多个页面请求中重用,因此: app.js 但是,如果我想将相同的方法分配给/foo和/bar文件,会发生什么 i、 我需要尽可能以模块化或面向对象的方式获得它 有一种模式可以做到这一点?您在这里所做的只是在有人发出页面请求后将事件侦听器附加到socket.io。之后的每一个

我正在node中构建一个应用程序,使用express简化事情,使用socket.io进行套接字操作

因此,当我在编写代码时,我意识到它是可行的,但并不是最好和优雅的解决方案

我想做的唯一一件事是包装套接字事件的所有代码,然后在多个页面请求中重用,因此:

app.js

但是,如果我想将相同的方法分配给
/foo
/bar
文件,会发生什么

i、 我需要尽可能以模块化或面向对象的方式获得它


有一种模式可以做到这一点?

您在这里所做的只是在有人发出页面请求后将事件侦听器附加到socket.io。之后的每一个请求都会附加新的事件侦听器,当您在每次有人发出页面请求时使用新的事件侦听器阻塞服务器时,您的服务器慢慢开始耗尽内存。在路由处理程序中放入socket.io代码是没有意义的。看看这个:


套接字通常与路由分开,让事件侦听器在路由中侦听websocket上的连接并监听HTTP连接是没有意义的。所以,您能举个例子吗?不,不太可能,因为不需要,websocket有自己的连接,因此,您不应该将这些连接的事件处理程序放在等待HTTP连接的事件处理程序中。把插座放在app.Get外面,我的答案帮你了吗?
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');
});