UNPKG

linda-socket.io

Version:
201 lines (133 loc) 4.24 kB
# Deprecated move to [linda](https://www.npmjs.org/package/linda) Linda Socket.IO =============== <a href="http://en.wikipedia.org/wiki/Linda_(coordination_language)">Coordinatioin Launguage "Linda"</a> implementation for Node.js and Socket.IO - https://github.com/node-linda/linda-socket.io - https://npmjs.org/package/linda-socket.io [![Travis CI Status Badge](https://travis-ci.org/node-linda/linda-socket.io.png)](https://travis-ci.org/node-linda/linda-socket.io) Install ------- % npm install linda-socket.io % npm install socket.io socket.io-client Requirements ------------ - Node.js - [Socket.IO](http://socket.io/) Linda ----- Linda is a coordination launguage for parallel programming. * http://en.wikipedia.org/wiki/Linda_(coordination_language) * http://ja.wikipedia.org/wiki/Linda ### TupleSpace Shared memory on Node.js server. ### Tuple Operations - write( tuple , options ) - put a Tuple into the TupleSpace - options = {expire : 300} # => expire after 300 sec - take( tuple, callback(err, tuple) ) - get a matched Tuple from the TupleSpace and delete - read( tuple, callback(err, tuple) ) - get a matched Tuple from the TupleSpace - watch( tuple, callback(err, tuple) ) - overwatch written Tuples in the TupleSpace Samples ------- - https://github.com/node-linda/linda-socket.io/tree/master/samples - https://github.com/node-linda/linda-job-queue-sample ## Install Dependencies % git clone https://github.com/node-linda/linda-socket.io.git % cd linda-socket.io % npm install % npm install -g grunt-cli coffee-script ### Chat % coffee samples/chat/server.coffee 3000 => http://localhost:3000 ### Job-Queue % coffee samples/job-queue/server.coffee 3000 => http://localhost:3000 ### print Tuple read/write/take/watch/cancel logs % DEBUG=linda* coffee samples/chat/server.coffee 3000 % DEBUG=linda* coffee samples/job-queue/server.coffee 3000 Usage ----- ### Setup Server Side (node.js) ```javascript var http = require('http'); var app_handler = function(req, res){ // your web app code }; var app = http.createServer(app_handler); var io = require('socket.io').listen(app); var linda = require('linda-socket.io').Linda.listen({io: io, server: app}); app.listen(3000); console.log("server start - http://localhost:3000"); ``` Client Side (web browser) ```html <script src="/socket.io/socket.io.js"></script> <script src="/linda/linda-socket.io.js"></script> ``` ```javascript var socket = io.connect(location.protocol+"//"+location.host); var linda = new Linda().connect(socket); ``` Client Side (node.js) ```javascript var LindaClient = require('linda-socket.io').Client; var socket = require('socket.io-client').connect('http://localhost:3000'); var linda = new LindaClient().connect(socket); ``` ### Job-Queue Sample job client ```javascript // connect to tuplespace (shared memory) var ts = linda.tuplespace("calc"); // request $("#btn_request").click(function(){ ts.write({type: "request", query: "1-2+3*4"}); }); // wait result socket.on('connect', function(){ // overwatch Tuple ts.watch({type: 'result'}, function(err, tuple){ if(err) return; console.log(tuple.data.result); // => "1-2+3*4 = 11" }); }); ``` job worker ```javascript // connect to tuplespace (shared memory) var ts = linda.tuplespace("calc"); // calculate var work = function(){ ts.take({type: 'request'}, function(err, tuple){ if(!err){ var result = eval(tuple.data.query); // => "1-2+3*4" console.log(tuple.data.query+" = "+result); // => "1-2+3*4 = 11" ts.write({type: 'result', result: result}); // return to 'client' side } work(); // recursive call }); }; socket.on('connect', function(){ // Socket.IO's "connect" event work(); }); ``` see more [samples](https://github.com/node-linda/linda-socket.io/tree/master/samples) Test ---- % npm install % npm install -g grunt-cli coffee-script % grunt test watch % grunt Contributing ------------ 1. Fork it 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Push to the branch (`git push origin my-new-feature`) 5. Create new Pull Request