我使用MongoDB和Socket.IO创建了一些节点应用程序,当我插入一些文档时,每个操作都不起作用。我发现MongoDB在插入一些文档后不插入文档(我不知道有多少文档)。所以,我检查与MongoDB的外壳连接:查询后未释放的MongoDB连接
db.serverStatus().connections
起始节点的应用程序之前,甾体抗炎药:
插入后{ “电流”:1, “可用”:3275, “totalCreated”:NumberLong(639) }
一些文档:
{ “当前”:51, “可用”:3225, “totalCreated”:NumberLong (708)}
关断节点应用程式:
{ “当前”:1, “可用”:3275, “totalCreated”:NumberLong(708)}
这是服务器端的代码。 (我使用MongoDB的外部模块,所以可以从少MongoDB的原始模块node.js中不同的这个模块只是简单的包装MongoDB的基于无极API)
const app = require('http').createServer();
const io = require('socket.io')(app);
const am2 = require('am2');
...
am2.connect('localhost', '...', { ... });
const sockets = {};
io.on('connection', (socket) => {
// save the socket into sockets object
sockets[socket.id] = socket;
// release socket on disconnection
socket.on('disconnect',() => {
delete sockets[socket.id];
});
...
// pseudo doc inserting event
socket.on('/insert/some/docs', (data) => {
am2.insert({ ... }).then(() => {
socket.emit('/after/insert/some/docs', {});
}).catch(...);
});
});
当客户发出“/插入/一些/ docs'事件,服务器将文件插入到MongoDB中。前几次尝试运行良好,但在插入后,它不再工作。
我认为这是因为很多连接在插入完成后仍然存在,但我不知道为什么。如果它是像MySQL那样的RDBMS,那么在完成操作后每个连接都必须关闭,但在MongoDB中,它不应该是(据我所知)。
我不知道这是为什么发生,所以它会非常感激,帮我一把。
你知道官方的MongoDB驱动[已经支持诺言](http://mongodb.github.io/node-mongodb-native/2.1/reference/ecmascript6/)?除此之外:连接只能显式关闭,因此插入文档不会关闭任何连接。这也不需要这样做,因为连接被重用。每个插入的连接数量是否增加? – robertklep
那么你的am2软件包有什么问题?有它像github托管任何地方,所以我们可以看看代码? – Molda