1

最近、npm install を実行しました。これにより、すべてのパッケージが更新されました。何らかの理由で、これは私のウェブサーバーを壊しました (ページを読み込もうとすると、途中までしか読み込まれず、このエラーで終了します)。スタックトレースに表示されるパッケージである socket.io、redis、および nodetime のバージョンをロールバックしようとしましたが、Web サーバーを再び機能させることができませんでした。ヘルプ?私はOS Xで実行しています。

events.js:66
        throw arguments[1]; // Unhandled 'error' event
                       ^
TypeError: First argument must be a Buffer
    at RedisClient.message (/Users/jchu/code/python/agles/ci/web/back/node_modules/socket.io/lib/stores/redis.js:126:24)
    at RedisClient.EventEmitter.emit (events.js:115:20)
    at RedisClient.return_reply (/Users/jchu/code/python/agles/ci/web/back/node_modules/socket.io/node_modules/redis/index.js:440:22)
    at RedisReplyParser.<anonymous> (/Users/jchu/code/python/agles/ci/web/back/node_modules/socket.io/node_modules/redis/index.js:81:14)
    at RedisReplyParser.EventEmitter.emit (events.js:88:17)
    at RedisReplyParser.add_multi_bulk_reply (/Users/jchu/code/python/agles/ci/web/back/node_modules/socket.io/node_modules/redis/lib/parser/javascript.js:311:14)
    at RedisReplyParser.send_reply (/Users/jchu/code/python/agles/ci/web/back/node_modules/socket.io/node_modules/redis/lib/parser/javascript.js:272:18)
    at RedisReplyParser.execute (/Users/jchu/code/python/agles/ci/web/back/node_modules/socket.io/node_modules/redis/lib/parser/javascript.js:222:22)
    at RedisClient.on_data (/Users/jchu/code/python/agles/ci/web/back/node_modules/socket.io/node_modules/redis/index.js:358:27)
    at Socket.<anonymous> (/Users/jchu/code/python/agles/ci/web/back/node_modules/socket.io/node_modules/redis/index.js:93:14)
4

2 に答える 2

1

残念ながら、私のプロジェクトでは MsgPack が必要なので、ここにリストされている回答を使用できませんでした。

代わりに、次のページを見つけました: https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO

これらのコードの変更につながりました。

以前は:

redis = require('redis'),
redisPub = redis.createClient(),
redisSub = redis.createClient(),
redisClient = redis.createClient(),
RedisStore = require('connect-redis')(express),
sessionStore = new RedisStore({
  client: redisClient
}),
socketRedisStore = require('socket.io/lib/stores/redis'),
socketRedis = require('socket.io/node_modules/redis'),

...

io.configure(function() {
  io.set('log level', 1);
  io.set('store', new socketRedisStore({
    redisPub: redisPub,
    redisSub: redisSub,
    redisClient: redisClient
  }));
  io.set('authorization', function(data, accept) {

...

これに:

redis = require('redis'),
redisPub = redis.createClient(),
redisSub = redis.createClient(null, null, {detect_buffers: true}),
redisClient = redis.createClient(),
RedisStore = require('connect-redis')(express),
sessionStore = new RedisStore({
  client: redisClient
}),
socketRedisStore = require('socket.io/lib/stores/redis'),
socketRedis = require('socket.io/node_modules/redis'),

...

io.configure(function() {
  io.set('log level', 1);
  io.set('store', new socketRedisStore({
    redis: redis,
    redisPub: redisPub,
    redisSub: redisSub,
    redisClient: redisClient
  }));
  io.set('authorization', function(data, accept) {

...

バッファを検出するために redisSub にオプションが含まれていることに注意してください。次に、基本 redis オブジェクトを socket.io ストア構成に挿入します。

于 2013-12-20T18:47:18.013 に答える