7

is there any way to run socketio as a client(not a browser, but a nodejs script)

I need to broadcast data from a server to some clients (browsers) and to another linux machine (only running nodejs to get variables, no browser)

Any ideias is welcome

Regards

Vitor
  • 191
  • 4
  • 10
  • Looks like a duplicate of this question: http://stackoverflow.com/questions/3842565/is-there-a-browserless-websocket-client-for-node-js-that-does-not-need-to-use-a – Timothy Strimple Jan 28 '12 at 03:07

4 Answers4

4

There is a project on github which implements a socket.io client. Take a look here:

https://github.com/remy/Socket.io-node-client

var socket = new io.Socket('localhost', 8000);

socket.on('connect', function () {
  console.log('yay, connected!');
  socket.send('hi there!');
});

socket.on('message', function (msg) {
  console.log('a new message came in: ' + JSON.stringify(msg));
});

socket.connect();
Timothy Strimple
  • 22,920
  • 6
  • 69
  • 76
3

I believe you could just use socket.io-client. require that and use that in your node.js code as would in the client/browser. I also found this interesting tutorial right now => http://liamkaufman.com/blog/2012/01/28/testing-socketio-with-mocha-should-and-socketio-client/

Alfred
  • 60,935
  • 33
  • 147
  • 186
1

Just require('socket.io-client') and run $ node client.js as pointed out by Alfred. I confirm this works with socket.io-client v1.4.8. To demonstrate, see the following code:

// client.js
var io = require('socket.io-client');
var socket = io('http://localhost:3000/');
socket.on('connect', function () {
  socket.emit('echo', {msg: 'Hello universe!'}, function (response) {
    console.log(response.msg);
    socket.disconnect();  // otherwise the node process keeps on running.
  });
});

The server:

// server.js
var io = require('socket.io')(3000);
io.on('connection', function (socket) {
  socket.on('echo', function (data, response) {
    response(data);
  });
});

Spin up the server with $ node server.js and then the client $ node client.js in another terminal and watch the magic happening:

$ node client.js
Hello universe!

It works! A very convenient way for example to test your socket.io API.

Community
  • 1
  • 1
Akseli Palén
  • 27,244
  • 10
  • 65
  • 75
0

In that case, use the http request.

var port=3000; //original port

var bridge = express.createServer(
      express.logger()
    , express.bodyParser()
);
bridge.post('/msg', function(req, res){ 
    res.writeHead(200,{'Content-Type':'text/plain'});
    //res.write(req.params.msg);
    res.end(req.params.msg);

    console.log();
    io.sockets.in().emit('message', "chat", req.body.user_id,req.body.msg);  //SEND!
});
bridge.listen(parseInt(port)+1,function() {
  var addr = bridge.address();
  console.log('   app listening on http://' + addr.address + ':' + addr.port);
});

This is my code. good luck.

Sunwoo Kwon
  • 24
  • 1
  • 4