带有PostgreSQL和socket.io的node.js错误:socket不可写

带有PostgreSQL和socket.io的node.js错误:socket不可写,postgresql,node.js,websocket,socket.io,node-postgres,Postgresql,Node.js,Websocket,Socket.io,Node Postgres,我一直在玩socket.io,它似乎工作得很好。不过,最近我安装了postgreSQL,以便在每次事件发生时(并且事件每秒发生2到3次!)向数据库插入行。。。下面是一个片段: pg.connect(conString, function(err, dbClient) { io.sockets.on("connection", function(client) { client.on("clientSendingPlayerData", function(playerData) {

我一直在玩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)
net.js:391
抛出新错误(“套接字不可写”);
^
错误:套接字不可写
在套接字上进行写操作(net.js:391:11)
at Socket.write(net.js:377:17)
在[object object].query(/homes/jjl310/node_modules/pg/lib/connection.js:109:15)
在[object object].submit(/homes/jjl310/node_modules/pg/lib/query.js:99:16)
在[object object]。\u pulseQueryQueue(/homes/jjl310/node\u modules/pg/lib/client.js:166:24)
在[object object].query(/homes/jjl310/node_modules/pg/lib/client.js:193:8)

在套接字上。

pg.connect()
从池中获取连接,
dbClient
是活动连接。长时间运行的连接可能会超时、出错或因不活动而被删除。您想将
pg.connect()
移入
clientSendingPlayerData
回调。这样一来,db连接仅在需要时才从池中提取,完成后返回池中。

谢谢,我会尝试一下。。问题是,每次事件发生时都连接到数据库可以吗?请记住,该事件被频繁触发…
pg.connect()
设置并使用客户端池。如果您需要作为一个组/事务执行多个查询,那么可以使用同一个客户机执行。只是不要把客户留着待会儿使用,因为这会清空你的资金池,如果有什么好处的话,你也不会得到很多
var client=new pg.client(…)
设置非池连接,我认为这就是
pg.connect()
所混淆的。