带有PostgreSQL和socket.io的node.js错误:socket不可写
我一直在玩socket.io,它似乎工作得很好。不过,最近我安装了postgreSQL,以便在每次事件发生时(并且事件每秒发生2到3次!)向数据库插入行。。。下面是一个片段:带有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) {
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()
所混淆的。