2012-06-05 2 views
0

socket.io를 가지고 놀았으며 잘 작동하는 것 같습니다.node.js with PostgreSQL 및 socket.io 오류 : 소켓 쓰기가 가능하지 않습니다.

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"); 
     }); 
    }); 
    }); 
}); 

우리는 오류를 얻을 : 나는 데이터베이스마다 이벤트가 발생 (!와 이벤트가 초당 2 ~ 3 회 발생)에 행을 삽입 PostgreSQL을 설치 최근 불구하고 ... 여기에 코드 조각의

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

답변

2

pg.connect()에 대해 다음 라이브러리를 사용하고있어 dbClient 활성 연결입니다, 풀에서 연결을 가져옵니다. 장기 실행 연결은 시간 초과, 오류 또는 비활성으로 인해 삭제 될 수 있습니다. pg.connect()clientSendingPlayerData 콜백으로 이동하려고합니다. 그런 식으로 db connetion은 필요한 경우에만 풀에서 끌어 당기고 완료되면 풀로 되돌아갑니다.

+0

감사합니다. 나는 그것을 줄 것이다. 질문은, 사건이 일어날 때마다 데이터베이스에 연결하는 것이 좋습니까? 이벤트가 꽤 자주 발생한다는 것을 기억하십시오 ... – meltuhamy

+0

'pg.connect()'가 설정되어 있고 클라이언트 풀을 사용합니다. 그룹/트랜잭션으로 여러 쿼리를 수행해야하는 경우 동일한 클라이언트로 쿼리를 수행하는 것이 좋습니다. 너의 수영장을 비울 것이나 너는 무엇이든을 얻는 것을 얻지 않을 것이기 때문에 다만 사용을 위해 주변에 클라이언트를 붙들 지마. 'var client = new pg.Client (...)'는 풀링되지 않은 연결을 설정합니다. 이것은'pg.connect()'와 혼동을 일으키는 것입니다. –