0

私は socket.io をいじってみましたが、うまく機能しているようです。しかし最近、イベントが発生するたびにデータベースに行を挿入するためにpostgreSQLをインストールしました(そして、イベントは毎秒2〜3回発生します!)...ここにスニペットがあります:

pg.connect(conString, function(err, dbClient) {
  io.sockets.on("connection", function(client) {
    client.on("clientSendingPlayerData", function(playerData) {
      dbClient.query("insert into actions values (1)", function() {
        console.log("INSERTED ROW");
      });
    });
  });
});

次のエラーが表示されます。

net.js:391
    throw new Error('Socket is not writable');
          ^
Error: Socket is not writable
    at Socket._writeOut (net.js:391:11)
    at Socket.write (net.js:377:17)
    at [object Object].query (/homes/jjl310/node_modules/pg/lib/connection.js:109:15)
    at [object Object].submit (/homes/jjl310/node_modules/pg/lib/query.js:99:16)
    at [object Object]._pulseQueryQueue (/homes/jjl310/node_modules/pg/lib/client.js:166:24)
    at [object Object].query (/homes/jjl310/node_modules/pg/lib/client.js:193:8)
    at Socket.<anonymous> (/homes/jjl310/tradersgame/server.js:182:16)
    at Socket.$emit (events.js:64:17)
    at SocketNamespace.handlePacket (/homes/jjl310/node_modules/socket.io/lib/namespace.js:335:22)
    at Manager.onClientMessage (/homes/jjl310/node_modules/socket.io/lib/manager.js:469:38)

問題の原因とそれを修正する方法についてのアイデアはありますか?

postrgreSQL に次のライブラリを使用しています https://github.com/brianc/node-postgres

4

1 に答える 1

2

pg.connect()プールから接続を取得しdbClient、アクティブな接続です。長時間実行されている接続は、タイムアウト、エラー、または非アクティブのためにドロップされる可能性があります。コールバックに移動pg.connect()clientSendingPlayerDataます。そうすれば、データベース接続は必要なときにのみプールから取得され、終了するとプールに返されます。

于 2012-06-05T16:42:29.973 に答える