Compare commits
	
		
			8 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | f81b091f97 | ||
|  | fc5859ddc8 | ||
|  | e3aa7e90ad | ||
|  | 44ff858a0c | ||
|  | 7342ee2bb0 | ||
|  | 7a46803159 | ||
|  | 34b0aaf460 | ||
|  | 14c4788e8c | 
							
								
								
									
										88
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										88
									
								
								README.md
									
									
									
									
									
								
							| @ -28,16 +28,34 @@ If you need that functionaliy, use v1 instead of v2. | ||||
| Usage | ||||
| ===== | ||||
| 
 | ||||
| In its simplest form, you use this module nearly exactly the way you would | ||||
| the any other storage module, with the exception that you must wait for | ||||
| the inter-process initialization to complete. | ||||
| 
 | ||||
| When not using any of the options the usage is the same for the master and the worker: | ||||
| 
 | ||||
| ```javascript | ||||
| require('cluster-store').create().then(function (store) { | ||||
|   // initialization is now complete | ||||
|   store.set('foo', 'bar'); | ||||
| }); | ||||
| ``` | ||||
| 
 | ||||
| ### standalone (non-cluster) | ||||
| -------------- | ||||
| 
 | ||||
| The usage is exactly the same as **master**, no changes necessary. | ||||
| There is no disadvantage to using this module standalone. | ||||
| The additional overhead of inter-process communication is only added when | ||||
| a worker is added. | ||||
| 
 | ||||
| As such, the standalone usage is identical to usage in master process, as seen below. | ||||
| 
 | ||||
| ### master | ||||
| 
 | ||||
| In the **master**/**standalone** process you will create the real store instance | ||||
| and then in the you must pass each worker via `addWorker()` so that it signals | ||||
| the worker to create its own rpc-wrapped instance. | ||||
| In the **master** process you will create the real store instance. | ||||
| 
 | ||||
| If you need to manually specify which worker will be enabled for this funcitonality | ||||
| you must set `addOnFork` to `false` and call `addWorker()` manually. | ||||
| 
 | ||||
| ```javascript | ||||
| 'use strict'; | ||||
| @ -45,18 +63,21 @@ the worker to create its own rpc-wrapped instance. | ||||
| var cluster = require('cluster'); | ||||
| 
 | ||||
| var cstore = require('cluster-store/master').create({ | ||||
|   name: 'foo-store' | ||||
| , store: null // use default in-memory store | ||||
|   name: 'foo-store'       // necessary when using multiple instances | ||||
| , store: null             // use default in-memory store | ||||
| , addOnFork: true         // default | ||||
| }); | ||||
| 
 | ||||
| cstore.addWorker(cluster.fork()); | ||||
| // if you addOnFork is set to false you can add specific forks manually | ||||
| //cstore.addWorker(cluster.fork()); | ||||
| 
 | ||||
| cstore.then(function (store) { | ||||
|   store.set('foo', 'bar'); | ||||
| }); | ||||
| ``` | ||||
| 
 | ||||
| Note: `store` can be replaced with any `express/session` store, such as: | ||||
| Note: `store` can be replaced with any `express/session`-compatible store, such as: | ||||
| 
 | ||||
|   * `new require('express-session/session/memory')()` | ||||
|   * `require('level-session-store')(session)` | ||||
|   * and others | ||||
| @ -110,46 +131,21 @@ Example | ||||
| 'use strict'; | ||||
| 
 | ||||
| var cluster = require('cluster'); | ||||
| var cstore; | ||||
| 
 | ||||
| require('cluster-store').create({ | ||||
|   name: 'foo-store' | ||||
| }).then(function (store) { | ||||
|   if (cluster.isMaster) { | ||||
|     store.set('foo', 'bar'); | ||||
|   } | ||||
| 
 | ||||
|   store.get('foo', function (err, result) { | ||||
|     console.log(result); | ||||
|   }); | ||||
| }); | ||||
| 
 | ||||
| if (cluster.isMaster) { | ||||
| 
 | ||||
| 
 | ||||
|   cstore = require('./master').create({ | ||||
|     name: 'foo-level' | ||||
|   }); | ||||
|   cstore.addWorker(cluster.fork()); | ||||
|   cstore.then(function (store) { | ||||
|     store.put('foo', 'bar'); | ||||
|   }); | ||||
| 
 | ||||
| 
 | ||||
|   cluster.fork(); | ||||
|   cluster.fork(); | ||||
| } | ||||
| else { | ||||
| 
 | ||||
| 
 | ||||
|   cstore = require('./worker').create({ | ||||
|     name: 'foo-level' | ||||
|   }); | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| cstore.then(function (store) { | ||||
|   setTimeout(function () { | ||||
|     store.get('foo', function (err, result) { | ||||
|       console.log(cluster.isMaster && '0' || cluster.worker.id.toString(), "store.get('foo')", result); | ||||
| 
 | ||||
|       if (!cluster.isMaster) { | ||||
|         process.exit(0); | ||||
|       } | ||||
|     }); | ||||
|   }, 250); | ||||
| }); | ||||
| 
 | ||||
| process.on('unhandledRejection', function (err) { | ||||
|   console.log('unhandledRejection', err); | ||||
| }); | ||||
| ``` | ||||
|  | ||||
							
								
								
									
										15
									
								
								index.js
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								index.js
									
									
									
									
									
								
							| @ -1,12 +1,9 @@ | ||||
| 'use strict'; | ||||
| 
 | ||||
| console.error(""); | ||||
| console.error("One does not simply require('memstore-cluster');"); | ||||
| console.error(""); | ||||
| console.error("Usage:"); | ||||
| console.error("\trequire('memstore-cluster/master').create({ name: ... });"); | ||||
| console.error("\trequire('memstore-cluster/worker').create({ name: ... });"); | ||||
| console.error(""); | ||||
| console.error(""); | ||||
| var cluster = require('cluster'); | ||||
| 
 | ||||
| process.exit(1); | ||||
| if (cluster.isMaster) { | ||||
|   module.exports = require('./master'); | ||||
| } else { | ||||
|   module.exports = require('./worker'); | ||||
| } | ||||
|  | ||||
| @ -14,5 +14,6 @@ module.exports.create = function (opts) { | ||||
|     ] | ||||
|   , name: 'memstore.' + (opts.name || '') | ||||
|   , master: opts.master | ||||
|   , addOnFork: opts.addOnFork | ||||
|   }); | ||||
| }; | ||||
|  | ||||
							
								
								
									
										18
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								package.json
									
									
									
									
									
								
							| @ -1,7 +1,8 @@ | ||||
| { | ||||
|   "name": "cluster-store", | ||||
|   "version": "2.0.1", | ||||
|   "version": "2.0.8", | ||||
|   "description": "A wrapper to enable the use of any in-process store with node cluster via cluster process and worker messages (i.e. for Raspberry Pi servers).", | ||||
|   "homepage": "https://git.coolaj86.com/coolaj86/cluster-store.js", | ||||
|   "main": "index.js", | ||||
|   "scripts": { | ||||
|     "test": "node test-cluster.js", | ||||
| @ -9,8 +10,10 @@ | ||||
|   }, | ||||
|   "repository": { | ||||
|     "type": "git", | ||||
|     "url": "git+https://github.com/coolaj86/cluster-store.git" | ||||
|     "url": "git+https://git.coolaj86.com/coolaj86/cluster-store.js.git" | ||||
|   }, | ||||
|   "bundleDependencies": false, | ||||
|   "deprecated": false, | ||||
|   "keywords": [ | ||||
|     "store", | ||||
|     "session", | ||||
| @ -20,13 +23,16 @@ | ||||
|     "cluster", | ||||
|     "rpi2" | ||||
|   ], | ||||
|   "author": "AJ ONeal <coolaj86@gmail.com> (http://coolaj86.com/)", | ||||
|   "author": { | ||||
|     "name": "AJ ONeal", | ||||
|     "email": "coolaj86@gmail.com", | ||||
|     "url": "https://coolaj86.com/" | ||||
|   }, | ||||
|   "license": "Apache-2.0", | ||||
|   "bugs": { | ||||
|     "url": "https://github.com/coolaj86/cluster-store/issues" | ||||
|     "url": "https://git.coolaj86.com/coolaj86/cluster-store.js/issues" | ||||
|   }, | ||||
|   "homepage": "https://github.com/coolaj86/cluster-store#readme", | ||||
|   "dependencies": { | ||||
|     "cluster-rpc": "^1.0.3" | ||||
|     "cluster-rpc": "^v1.0.6" | ||||
|   } | ||||
| } | ||||
|  | ||||
							
								
								
									
										26
									
								
								simplest.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								simplest.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | ||||
| 'use strict'; | ||||
| 
 | ||||
| var cluster = require('cluster'); | ||||
| var cstore; | ||||
| 
 | ||||
| require('./').create({ | ||||
|   name: 'foo-store' | ||||
| }).then(function (store) { | ||||
|   if (cluster.isMaster) { | ||||
|     cluster.fork(); | ||||
|     cluster.fork(); | ||||
| 
 | ||||
|     store.set('foo', 'bar'); | ||||
|   } | ||||
| 
 | ||||
|   store.get('foo', function (err, result) { | ||||
|     console.log(cluster.isMaster && '0' || cluster.worker.id.toString(), 'foo', result); | ||||
|     if (!cluster.isMaster) { | ||||
|       process.exit(0); | ||||
|     } | ||||
|   }); | ||||
| }); | ||||
| 
 | ||||
| process.on('unhandledRejection', function (err) { | ||||
|   console.log('unhandledRejection', err); | ||||
| }); | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user