【问题标题】:socket.io doesn't seem to be starting and doesn't recognize io.configure methodsocket.io 似乎没有启动并且无法识别 io.configure 方法
【发布时间】:2014-07-20 21:43:45
【问题描述】:

我正在尝试让 socket.io 与 node/express 一起运行(我已经这样做了无数次 - 所以我很困惑)。当我尝试使用 io.configure 方法配置 socket.io 时出现错误:

io.configure(function() {
   ^
TypeError: Object #<Server> has no method 'configure'
    at Object.<anonymous> (/home/yz/webdev/ground/app.js:377:4)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:902:3

我的代码正是它在socket.io 上所说的那样 - 但我会发布它以防万一:

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

server.listen(8000);

//other declarations
app.use(...
passport.use(...

//some routes
app.get(...
app.post(...

io.configure(function() {
  io.set('transports', ['websocket','xhr-polling','flashsocket']);
  io.set('flash policy port', 10843);
});

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

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

io.configure 方法引发了错误 - 我之前在其他网站上也这样做过,但我不明白它现在不起作用。谢谢。

更新

我刚刚读到here io.configure 不再存在 - 但是,我似乎也无法让它以新的方式工作。这是我的新代码:

var express = require('express');
var app = express();
var server = require('http').createServer(app);
//var io = require('socket.io').listen(server);
var socket = require('socket.io')({
  'transports': ['websocket','xhr-polling','flashsocket'],
  'flash policy port': 10843
});

var io = socket.listen(server);

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

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

我没有收到任何错误,socket.io 似乎没有启动。

【问题讨论】:

    标签: javascript node.js sockets socket.io typeerror


    【解决方案1】:

    您将io 分配给服务器,当您尝试调用io 上的函数时会出现问题,这些函数可从socket.io 获得。尝试替换此行:

    var io = require('socket.io').listen(server);
    

    用这一行:

    var io = require('socket.io')(server);
    

    socket.io docs 列出了一些您可以利用的配置模式,并且可以使用socket.io 创建服务器。但是由于您已经在创建服务器,因此您不需要使用socket.io。

    【讨论】:

    • 我按照你的建议做了,但 socket.io 似乎还是死了——没有控制台消息说它启动了。
    • 我正在使用 socket.io 从 Flash 游戏中检索要发布在网站上的数据 - 这就是为什么我需要在服务器上监听 socket.io。
    • io.configure 不再存在
    • 我看到了更新,但它仍然有 var io = socket.listen(server);。尝试用我上面所说的替换,或者使用文档中的示例:socket.io/docs/#using-with-express-3/4
    • 我尝试了 express 4 文档中的新示例,但仍然无法正常工作。
    猜你喜欢
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 2011-01-12
    • 2020-06-30
    • 2017-04-27
    • 1970-01-01
    相关资源
    最近更新 更多