Compare commits
	
		
			3 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | f81b091f97 | ||
|  | fc5859ddc8 | ||
|  | e3aa7e90ad | 
							
								
								
									
										77
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										77
									
								
								README.md
									
									
									
									
									
								
							| @ -28,14 +28,31 @@ If you need that functionaliy, use v1 instead of v2. | |||||||
| Usage | 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) | ### 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 | ### master | ||||||
| 
 | 
 | ||||||
| In the **master**/**standalone** process you will create the real store 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 | If you need to manually specify which worker will be enabled for this funcitonality | ||||||
| you must set `addOnFork` to `false` and call `addWorker()` manually. | you must set `addOnFork` to `false` and call `addWorker()` manually. | ||||||
| @ -46,7 +63,7 @@ you must set `addOnFork` to `false` and call `addWorker()` manually. | |||||||
| var cluster = require('cluster'); | var cluster = require('cluster'); | ||||||
| 
 | 
 | ||||||
| var cstore = require('cluster-store/master').create({ | var cstore = require('cluster-store/master').create({ | ||||||
|   name: 'foo-store' |   name: 'foo-store'       // necessary when using multiple instances | ||||||
| , store: null             // use default in-memory store | , store: null             // use default in-memory store | ||||||
| , addOnFork: true         // default | , addOnFork: true         // default | ||||||
| }); | }); | ||||||
| @ -59,7 +76,8 @@ cstore.then(function (store) { | |||||||
| }); | }); | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| 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')()` |   * `new require('express-session/session/memory')()` | ||||||
|   * `require('level-session-store')(session)` |   * `require('level-session-store')(session)` | ||||||
|   * and others |   * and others | ||||||
| @ -113,48 +131,21 @@ Example | |||||||
| 'use strict'; | 'use strict'; | ||||||
| 
 | 
 | ||||||
| var cluster = require('cluster'); | 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) { | if (cluster.isMaster) { | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|   cstore = require('./master').create({ |  | ||||||
|     name: 'foo-level' |  | ||||||
|   }); |  | ||||||
|   cstore.then(function (store) { |  | ||||||
|     store.put('foo', 'bar'); |  | ||||||
|   }); |  | ||||||
| 
 |  | ||||||
|   // create as many workers as you need |  | ||||||
|   cluster.fork(); |   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'; | 'use strict'; | ||||||
| 
 | 
 | ||||||
| console.error(""); | var cluster = require('cluster'); | ||||||
| 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(""); |  | ||||||
| 
 | 
 | ||||||
| process.exit(1); | if (cluster.isMaster) { | ||||||
|  |   module.exports = require('./master'); | ||||||
|  | } else { | ||||||
|  |   module.exports = require('./worker'); | ||||||
|  | } | ||||||
|  | |||||||
							
								
								
									
										18
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								package.json
									
									
									
									
									
								
							| @ -1,7 +1,8 @@ | |||||||
| { | { | ||||||
|   "name": "cluster-store", |   "name": "cluster-store", | ||||||
|   "version": "2.0.3", |   "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).", |   "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", |   "main": "index.js", | ||||||
|   "scripts": { |   "scripts": { | ||||||
|     "test": "node test-cluster.js", |     "test": "node test-cluster.js", | ||||||
| @ -9,8 +10,10 @@ | |||||||
|   }, |   }, | ||||||
|   "repository": { |   "repository": { | ||||||
|     "type": "git", |     "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": [ |   "keywords": [ | ||||||
|     "store", |     "store", | ||||||
|     "session", |     "session", | ||||||
| @ -20,13 +23,16 @@ | |||||||
|     "cluster", |     "cluster", | ||||||
|     "rpi2" |     "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", |   "license": "Apache-2.0", | ||||||
|   "bugs": { |   "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": { |   "dependencies": { | ||||||
|     "cluster-rpc": "^1.0.4" |     "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