【问题标题】:socket.io configurationsocket.io 配置
【发布时间】:2011-10-10 08:07:42
【问题描述】:

我正在尝试按照 https://github.com/LearnBoost/socket.io/wiki/Configuring-Socket.IO 设置 socket.io 的配置

io.set('log level', 1);

但是我得到 TypeError: Object # has no method 'set' ...怎么了?我有 io = require("socket.io")

也试过了,

io.configure('production', function(){
    io.set('log level', 1);
});

但没有运气。怎么了?

编辑:

require.paths.push('/cygdrive/c/Personal/software/nodejs/NODE/node_modules');
var express = require("express"),
    fs = require("fs"),
    form = require('connect-form'),
    app = express.createServer(
        form({ keepExtensions: true })
    ),
    sys = require("sys"),
    RentModel = require("./rent_schema"),
    UserModel   = require("./track_schema"),
    io = require("socket.io"),
    fb = require('facebook-js'),
    Twitter = require('./Twitter_Analysis'),
    Foursquare = require('./Foursquare_Analysis'),
    YQL = require("yql"),
    settings = require("./settings");



socket = io.listen(app);
:::::::::::::::::
app.listen(9999);

这很好用。但是如果我将它更改为 io = require("socket.io").listen(8080) 它会给我错误,找不到监听方法。

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    require('socket.io') 返回一个 Socket 对象。设置的属性位于 socket.io-manager 上。经理由require('socket.io').listen(server) 调用返回。

    请注意,您应该将 Web 服务器传递给 socket.io,而不仅仅是端口:

    var app = require('http').createServer(handler),
        io  = require('socket.io').listen(app);
    
    io.set('log level', 2);
    
    app.listen(8080); // this is the server, not socket.io
    

    【讨论】:

      【解决方案2】:

      你想要var io = require('socket.io').listen(80); 而不仅仅是require。

      【讨论】:

      • 我的应用程序在没有 listen(80) 的情况下也能完美运行...想添加此配置以降低日志级别。当添加listen(80)时,这也会失败并出现错误,node.js:134 throw e; // process.nextTick 错误,或第一次滴答时发生 'error' 事件 ^ TypeError: Object # has no method 'listen'
      • 那是因为端口 80 上正在运行一些东西
      • @Jason_King 你听的是http进程,不是端口,我相信
      【解决方案3】:
      var io = require('socket.io').listen(80);
      
      io.configure( function(){
          io.set('log level', 3);
      
      });
      

      这里有一件重要的事情需要注意。如果您在第一次滴答时收到 error*process.nextTick 错误或 'error' 事件...* 这意味着您有另一个网络服务器,例如 Apache,正在侦听端口 80。

      因此,如果您将端口更改为例如 8080,它应该可以工作:

      var io = require('socket.io').listen(8080);
      
      io.configure( function(){
          io.set('log level', 3);
      
      });
      

      希望这会有所帮助。

      【讨论】:

      • 感谢您的解释。我在“listen”上收到错误,因为“TypeError: Object # has no method 'listen'”....我正在使用 express 并在端口 9999 上侦听...如果我使用这会导致问题吗要求('socket.io').listen(9999)或listen(8080)??如果我不像 require('socket.io').listen(9999) 那样使用监听,我的应用程序工作得很好。但我需要添加“io.set('log level', 3);”,但是我不能像它所说的“没有方法'设置'”
      • 看起来您无法“包含”socket.io。这就是为什么它在快速服务器(应用程序)而不是套接字服务器上工作的原因。试试 /socket.io 或 ../socket.io 之类的,指向正确的路径。
      • 路径似乎是正确的..如果我使用“/socket.io”,它会抛出错误,错误:找不到模块'/socket.io'..如果它不包括在内,它如何与 express 一起使用?
      • 既然我正在监听 socket = io.listen(app) --- 会不会如下? socket.configure('production', function(){ socket.set('log level', 1); });
      猜你喜欢
      • 1970-01-01
      • 2023-03-18
      • 2018-04-16
      • 1970-01-01
      • 2012-03-11
      • 2016-06-23
      • 2015-06-10
      • 1970-01-01
      • 2017-02-25
      相关资源
      最近更新 更多