Express-Generator - 包括socket.io(bin / www)

时间:2014-12-28 18:25:28

标签: node.js express socket.io

我一直都是一个Perl / PHP排序的人,但我喜欢改变,而Node JS似乎是我接下来的合适位置。

我在YouTube上观看了几个小时的教程,并在这里阅读了一些帖子 - 但我有点卡住了。

我想在我的快速生成的应用程序中包含socket.io(v4.10.6)。 但与此同时,我并不想将 socket.on(...)语句包含在一个文件中 - 我更倾向于将其拆分出来,就像使用路径一样。

鉴于明确生成的应用程序是在 bin / www 中启动的,我很困惑我需要在哪里('socket.io')并指出所有'on'事件到。

This post on stackoverflow,我认为可能会回答我的问题 - 但它表明所有套接字处理程序都在 ./ sockets / base.js 文件中 - 我对Gofilord的回复感到困惑回答。

请原谅我的无知 - 此刻此刻对我来说有点陌生,并且感谢你,一如既往地花时间阅读这篇文章和你的帮助。

/ bin中/万维网

#!/usr/bin/env node
var debug   = require('debug')('rhubarb');
var app     = require('../app');

app.set('port', process.env.PORT || 1127);

var server = app.listen(app.get('port'), function() {
  debug('Express server listening on port ' + server.address().port);
});

1 个答案:

答案 0 :(得分:2)

它通常需要app.js中的socket.io然后告诉你的io服务器听你的应用程序。使用您发布的示例,如下所示:

var debug   = require('debug')('rhubarb');
var app     = require('../app');
var server  = require('http').Server(app);
var io      = require('socket.io')(server);

app.set('port', process.env.PORT || 1127);

var server = server.listen(app.get('port'), function() {
  debug('Express server listening on port ' + server.address().port);
});

socketio docs能够很好地解释这一点。这是他们主页上的一个例子:

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

server.listen(80);

app.get('/', function (req, res) {
  res.sendfile(__dirname + '/index.html');
});

io.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

更新

我通常通过在/lib中创建名为io.js的lib来模块化socketio设置,如下所示:

module.exports = function(server){
  var io = require('socket.io')(server);

  // catch errors
  io.on('error', function(err){
    throw err;
  })

  // Set Socket.io listeners by creating a socket.io middleware
  // attachEventlisteners would live in `/controllers`
  io.use(attachEventlisteners);

  io.on('connection', function (socket) {

    // do things

  });

  return io; // so it can be used in app.js ( if need be )
}

然后在app.js中,我可以在需要时简单地传递server

  var io = require('./lib/io')(server);

你不需要在app.js中做任何事情,因为所有内容都在/lib/io.js中设置,但如果你愿意,可以因为io服务器被返回。