clientpool.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // Copyright 2015 The MemDB Authors.
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
  12. // implied. See the License for the specific language governing
  13. // permissions and limitations under the License. See the AUTHORS file
  14. // for names of contributors.
  15. 'use strict';
  16. var P = require('bluebird');
  17. var AsyncLock = require('async-lock');
  18. var Client = require('./client');
  19. var logger = require('memdb-logger').getLogger('memdb-client', __filename);
  20. var clients = {}; // {'host:port' : client}
  21. var connectLock = new AsyncLock();
  22. exports.getClient = function(host, port){
  23. var key = host + ':' + port;
  24. return connectLock.acquire(key, function(){
  25. if(clients[key]){
  26. return clients[key];
  27. }
  28. var client = new Client();
  29. client.setMaxListeners(1025);
  30. return P.try(function(){
  31. return client.connect(host, port);
  32. })
  33. .then(function(){
  34. clients[key] = client;
  35. client.on('close', function(){
  36. delete clients[key];
  37. });
  38. return client;
  39. });
  40. });
  41. };