0.2.2 • Published 10 years ago

linda-socket.io v0.2.2

Weekly downloads
3
License
MIT
Repository
github
Last release
10 years ago

Deprecated

move to linda

Linda Socket.IO

Coordinatioin Launguage "Linda" implementation for Node.js and Socket.IO

Travis CI Status Badge

Install

% npm install linda-socket.io
% npm install socket.io socket.io-client

Requirements

Linda

Linda is a coordination launguage for parallel programming.

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

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)

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)

<script src="/socket.io/socket.io.js"></script>
<script src="/linda/linda-socket.io.js"></script>
var socket = io.connect(location.protocol+"//"+location.host);
var linda = new Linda().connect(socket);

Client Side (node.js)

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

// 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

// 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

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
0.2.2

10 years ago

0.2.1

10 years ago

0.2.0

10 years ago

0.1.7

10 years ago

0.1.6

10 years ago

0.1.5

10 years ago

0.1.4

10 years ago

0.1.3

10 years ago

0.1.2

10 years ago

0.1.1

10 years ago

0.1.0

10 years ago

0.0.9

10 years ago

0.0.8

10 years ago

0.0.7

10 years ago

0.0.6

10 years ago

0.0.5

10 years ago

0.0.4

10 years ago

0.0.3

10 years ago

0.0.2

10 years ago