最好在每个请求上都有一个从节点或连接到memcached/mongo的单一全局连接



我正在(重新)编写从php到节点的api,具有极高的使用率;它使用memcached,当前连接到memcached,每次PHP文件运行时,即每次访问API页面时,它都会关闭它的业务。

现在使用node,我们正在构建http服务器本身;我可以定义一个全局memcached连接并使用它:
var mclient = new memcache.Client(server, port);
// This would only run after mclient has connected 
http.createServer(function (req,res){
    // stuff involving mclient
}).listen(8888);

或者我可以把它放在createServer回调中。同样的问题也适用于mongodb连接。我该怎么做?

我建议使用一个以上连接的池。这将允许同时进行多个运行中的操作,同时节省创建新连接时TCP握手/速率限制和应用程序级握手(如登录)的开销。

我不知道memcached,但我认为MongoDB的节点本地驱动程序(https://github.com/christkv/node-mongodb-native)正在内置连接池上工作,所以你不必自己实现这个。文档中有一个注释说它很快就会发布,但是看起来代码已经在那里了,所以应该很快就会发布。

更新:我刚刚检查了驱动程序的作者和连接池是完全实现的,他只是忘记从文档中删除那一行。

一个连接更好,因为您不需要在每次向db发出请求时传递授权和初始化。几乎所有你想要快速访问的东西都应该存储在RAM中,不仅是数据库连接,还有一般模板或其他你经常使用的文件,配置或一些队列。

最新更新