NodeJS + MongoDB 建立长链接及后续请求方法

网上基本没有相关教程,要么就是错的。国外的讲解也不是很全面,我自己搞了一个给大家参考。
 
// 首先建立数据库连接,这里的MongoClient.connect()返回的是一个Promise对象,成功则把链接返回给Db对象。
const Db = MongoClient.connect(DBLINK).then(Db => { return Db.db(DBNAME); });
 
// 在建立连接之后可以在这里获取一些配置,给变量初始化,只在应用启动时读取一次。
Db.then(Db => Db.collection('a').find({ _id: ObjectId('621ddd7446f6073fc0cfa58a') }).toArray(function (err, out) {
   if (err) throw err;
   console.log(out);
}))
 
// 此处是用户每次请求时建立连接的过程,相当于一个async监听器,监听到请求后执行里面的东西。
Http.createServer(async (request, response) => {
 
// 因为上面的Db是Promise对象,因此这里要await等该连接调取后再执行,注意这里是从内存调取,不是重连。
let dbc = await Db;
 
// 执行数据库查询,返回结果数组。
let out = await dbc.collection('w').find({ _id: ObjectId('621ddd7446f6073fc0cfa58a') }).toArray();
console.log(out);
 
// 也可以把上面过程放入try...catch...finally,以捕获错误进行处置。
}
 
至于上面为何有的是.then而有的是await,其实这俩是一个东西,都是Promise对象的用法。只是NodeJS全局流程不是async,因此无法使用await而只能用.then。
 
Promise.then(done=>{},fail=>{})
可以在任何地方使用。
成功后调用done后大括号内代码,传入参数是done。
失败后调用fail后大括号内代码,传入参数是fail。
 
await Promise
必须包裹在async function之中。
可以用try{}catch(fail){}finally{}捕获异常。
语法更接近Java,相对好用,是前者变体。

你在试图教会我[em_3]

指南Nan
引用
你在试图教会我[em_3]
Bug2021 你在试图教会我[em_3]

每天看一遍就误了[em_24]

我不知道,一般我喜欢websocket

FANAYUN
引用
我不知道,一般我喜欢websocket
FANAYUN 我不知道,一般我喜欢websocket

连接数过多,访问量一大撑不住的。我准备先把程序框架大致写出来,后续再做性能优化。考虑的技术就是多线程/协程、同类请求多路复用这些。

C
引用
FANAYUN我不知道,一般我喜欢websocket 连接数过多,访问量一大撑不住的。我准备先把程序框架大致写出来,后续再做性能优化。考虑的技术就是多线程/协程、同类请求多路复用这些。
C 连接数过多,访问量一大撑不住的。我准备先把程序框架大致写出来,后续再做性能优化。考虑的技术就是多线程/协程、同类请求多路复用这些。

长链接再怎么玩都扛不住大访问的,几千人还行,多了再怎么都不行了,还是得上websocket。

FANAYUN
引用
C连接数过多,访问量一大撑不住的。我准备先把程序框架大致写出来,后续再做性能优化。考虑的技术就是多线程/协程、同类请求多路复用这些。 长链接再怎么玩都扛不住大访问的,几千人还行,多了再怎么都不行...
FANAYUN 长链接再怎么玩都扛不住大访问的,几千人还行,多了再怎么都不行了,还是得上websocket。

你那是TCP长链接,数据库长连接无所谓的

C
引用
FANAYUN长链接再怎么玩都扛不住大访问的,几千人还行,多了再怎么都不行了,还是得上websocket。 你那是TCP长链接,数据库长连接无所谓的
C 你那是TCP长链接,数据库长连接无所谓的

node.js和数据库长连接是正常的,php通过协程框架也可以实现和数据库的长连接,数据库的瓶颈就是IO,客户端直接长连接数据库,好像多了也不行吧,和TCP一个样,都得websocket。

FANAYUN
引用
C你那是TCP长链接,数据库长连接无所谓的 node.js和数据库长连接是正常的,php通过协程框架也可以实现和数据库的长连接,数据库的瓶颈就是IO,客户端直接长连接数据库,好像多了也不行吧,和...
FANAYUN node.js和数据库长连接是正常的,php通过协程框架也可以实现和数据库的长连接,数据库的瓶颈就是IO,客户端直接长连接数据库,好像多了也不行吧,和TCP一个样,都得websocket。

websocket建立在tcp基础上,这俩一样的。

至于mongodb,远程采用tcp,本地的话直接走socks。

1