Mongodb间歇性地不插入

时间:2013-08-14 04:56:53

标签: node.js mongodb mongoskin

我开始使用node.js和mongodb并创建了一个小测试应用程序,它应该将传入的UDP数据包的有效负载插入到mongodb中。我在OS X 10.8.4上运行它,并通过MacPorts安装了mongodb @2.4.5_0 (active)

stack.coffee

dgram = require 'dgram'
mongo = require 'mongoskin'

dbopts =  database: 'stacktest', safe: true, vvv:true
db = mongo.db('mongo://localhost/?auto_reconnect=true', dbopts)
db.bind('foo') 

server = dgram.createSocket('udp4')
server.on "message", (buffer, rinfo) ->
    res = db.foo.insert(buffer.toString(), (err) -> if err? then console.log(err) )

server.on "listening", ->
  address = server.address()
  console.log("UDP server listening " +
      address.address + ":" + address.port)

# listen for UDP packets on port 30000 
server.bind(30000)

使用coffee stack.coffee运行此代码并从另一个终端echo "Hello" | nc -w 1 -u localhost 30000向其发送消息正常工作,使用mongo您将看到保存的消息:

   > use stacktest
   switched to db stacktest
   > db.foo.find()
   { "_id" : ObjectId("520b09cc43ce0ade3601fa0a"), "0" : "H", "1" : "e", "2" : "l", "3" : "l", "4" : "o", "5" : "\n" } 

但是,在某些情况下,并且看似随机,插入将无声地失败。消息进来,被上面的代码拿起但数据包从未显示(我用一个发送时间戳的小脚本测试)。在一个新的会话中,它将正确地保存两个,也许四个数据包,然后静默地停止工作(即,err回调永远不会被调用)。重新启动新会话可能修复它,但并非总是如此。

请注意,我使用的是安全:true dbopts,所以我想我应该收到有关实际错误的通知。

最糟糕的是,它现在似乎没有任何明显的原因而自行解决,这增加了我将如何松动插入物的困惑和担忧。

任何想法或指示?谢谢!

0 个答案:

没有答案
相关问题