Giter Site home page Giter Site logo

Broadcast stream? about socket.io-stream HOT 5 OPEN

nkzawa avatar nkzawa commented on July 24, 2024
Broadcast stream?

from socket.io-stream.

Comments (5)

celevra avatar celevra commented on July 24, 2024 3

you don't have to track the connected sockets you can use io.sockets.connected like this:

  ss(socket).on('file', function(incomingstream, data) {

    for(var i in io.sockets.connected) {
      //don't send the stream back to the initiator
      if (io.sockets.connected[i].id != socket.id)
      {
        var socketTo = io.sockets.connected[i]
        var outgoingstream = ss.createStream();
        ss(socketTo).emit('file', outgoingstream, data);
        incomingstream.pipe(outgoingstream);
      }
    }
  });

from socket.io-stream.

nkzawa avatar nkzawa commented on July 24, 2024 1

Yeah, there is no way to do that for now, but I think we can implement that as you explain.
Please keep the issue open.

from socket.io-stream.

peteruithoven avatar peteruithoven commented on July 24, 2024

It is possible to collect all "consumer" sockets in an array, create a outgoing stream per consumer and pipe the stream to all consumers.

var nsp = io.of('/user');
nsp.on('connection', function(socket) {
  var query = socket.handshake.query;
  debug("/user new connection type: ",query.type);

  switch(query.type) {
    case "consumer":
      consumerSockets.push(socket);
      break;
  }
  debug("  consumerSockets.length: ",consumerSockets.length);

  // receive the image
  ss(socket).on('image', function(incomingStream, data) {
    debug("on image ",data);

    for(var i in consumerSockets) {
      var consumerSocket = consumerSockets[i];
      var outgoingStream = ss.createStream();
      ss(consumerSocket).emit('image', outgoingStream, {name: data.name});
      incomingStream.pipe(outgoingStream);
    }
  });
});

But the problem when you run multiple Node.js instances (clustering) is that you never have references to all client sockets. I've used my own Redis pub/sub library to talk to a specific client, but I'm not sure yet how to use that with streams, see:
socketio/socket.io#1811

from socket.io-stream.

peteruithoven avatar peteruithoven commented on July 24, 2024

Looking through the code I understand socket.io-stream sends chunks of the data using regular emit's. This means implementing a broadcast shouldn't be impossible. Then socket.io-redis would take care of the clustering challenge.

this.sio.emit(exports.event + '-write', id, chunk, encoding, callback);

From: https://github.com/nkzawa/socket.io-stream/blob/master/lib/socket.js#L151

from socket.io-stream.

peteruithoven avatar peteruithoven commented on July 24, 2024

@celevra You can't use properties like io.sockets.connected if you want to work clustered and you usually want to to handle scale.

from socket.io-stream.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.