在我的node.js应用程序中添加socket.io的位置

时间:2014-03-25 06:24:12

标签: node.js socket.io

所以我运行了这个基本的node.js服务器,现在我想用socket io添加另一个层。我可以使用socket io,示例here非常简单,效果很好。但我的应用程序要大得多,所以我做这个事情,我加载了一堆资源,然后通过调用start_app加载这个服务器模块。

我知道我不能把io.listen(app)放在第3行,因为我的服务器还没有启动。

我需要功能依赖,所以我如何添加socket.io添加到混合?

var   app= require('http')      // all http requests go to onRequest
    , url= require('url')       // path info stuff
    , io = require('socket.io') // socket io  

function start_app(route, handle) {
    function onRequest(request, response) {
        var pathname = url.parse(request.url).pathname.replace("/","")

        route(handle, pathname, request, response)
}


app.createServer(onRequest).listen(process.env.PORT || 8888)
io.listen(app)
console.log(". http://localhost:8888 .")
}


exports.start_app = start_app;

我的错误:

...socket.io/lib/manager.js:104
server.on('error', function(err) {
     ^
TypeError: Object #<Object> has no method 'on'...

2 个答案:

答案 0 :(得分:1)

而不是你的代码:

app.createServer(onRequest).listen(process.env.PORT || 8888)
io.listen(app)

你能这样做吗?

var createdServer = app.createServer(onRequest).listen(process.env.PORT || 8888);
io.listen(server).on('connection', function (socket) {
  socket.on('message', function (msg) {
      console.log('Message Received: ', msg);
      socket.broadcast.emit('message', msg);
  });
});

我们需要实际创建的服务器,所以socket.io可以听取它。然后处理'connection'事件。

答案 1 :(得分:0)

更改服务器的前几行修复它。 我不能100%确定为什么会这样,但是我认为服务器在调用此函数之前不应该启动是有意义的,因为它进入了应用程序的主事件循环。

var   app // all http requests go to onRequest
    , url = require('url')      // path info stuff
    , sio = require('socket.io') // socket io

function start_app(route, handle) {
    app = require('http').createServer(onRequest)
    sio = require('socket.io').listen(app)
    app.listen(process.env.PORT || 8888)