Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Sep 10 2018 02:41
    Naiba01 commented #1157
  • Sep 05 2018 18:37
    govarthananve commented #1080
  • Sep 05 2018 17:12
    carloquilala opened #1349
  • Aug 07 2018 11:42
    carloquilala edited #1348
  • Aug 07 2018 11:14
    carloquilala opened #1348
  • Jul 31 2018 06:46
    zaoansijia commented #1347
  • Jul 13 2018 01:45
    gapsaras commented #842
  • Jul 12 2018 10:08
    grootendorste commented #930
  • Jul 02 2018 15:06
    aozfen commented #1092
  • Jun 25 2018 17:25
    olliecaine27 closed #1268
  • Jun 03 2018 17:30
    olliecaine27 synchronize #1268
  • Jun 03 2018 17:16
    olliecaine27 synchronize #1268
  • May 22 2018 05:14
    ishan123456789 commented #1220
  • May 19 2018 08:38
    MirShi opened #1347
  • May 14 2018 19:53
    samanthi22 closed #1346
  • May 14 2018 19:53
    samanthi22 commented #1346
  • May 05 2018 17:33
    samanthi22 opened #1346
  • Apr 22 2018 09:28
    m-ketan closed #1319
  • Apr 20 2018 00:40
    matthew-dean commented #658
  • Apr 02 2018 12:36
    AndrewSavetchuk commented #1080
Mike DeVita
@mikedevita
With all connected clients like ... socket.on(item-update... update the items store with the changed item with id..
joshuaandrewhoffman
@joshuaandrewhoffman
So this is where this type of development gets really interesting to me. I'm not convinced there's aa single right way for every app to do this. In my case the sockets are often emitting actions which apply to at most two users: the user who initially sent the action to the server, and the user in the same game room.
So what I did was sort of scope down my concept of state on the server to those rooms and who was in them, and just emit to that. I had trouble getting socket.io's native rooms feature to emit to the calling user, and I had trouble with the automatically created room for the socket ID, so if you figure out the incantation for that please lmk
Mike DeVita
@mikedevita
okay
let me give you some background
im building a realtime infrastructure app
joshuaandrewhoffman
@joshuaandrewhoffman
I ended up just rolling my own room tracking since it wasn't terribly complex and I didn't want to be stuck
Mike DeVita
@mikedevita
to manage 300+ virtual machines, with agents on each system that report things like cpu/disk/memory usage and offer an entry point to shutdown/start services in an order on each VM.. for example shut down production ECC instance, which will first shut down the app servers, then the load balancer, then the database.
and i also want to provide realtime updates for things like changes to server info by a user/team member..
right now its not realtime, you have to refresh to see the changes.. the concept is if user a is on the site, user b changes a server i want user a to get notified of the change and see the changes.
i have the agent stuff down, using sailsjs for the backend and socket.io for the connections that works fine.
im just not sure how/where to put the socket.in('server-update, function() .... code at. should it go in a reducer/store file and just dispatch a thunk action like SERVER_UPDATED
joshuaandrewhoffman
@joshuaandrewhoffman
I probably should've checked first, are we pure socket-io here or using socket-io-redux? (Unsure I have that package name right I don't have my code in front of me)
Mike DeVita
@mikedevita
well its sails-io-js which is a wrapper around socket.io
pure socket.io on the client side for now i'd say
but im open to a library like socket-io-redux
joshuaandrewhoffman
@joshuaandrewhoffman
And I'm assuming either way you're doing redux or something redux-like on your server to track your state
Mike DeVita
@mikedevita
yup
this is the codebase
joshuaandrewhoffman
@joshuaandrewhoffman
Okay cool, lots of common ground here then. Cool app btw
i track socket connetion status in the global redux store under socket key
joshuaandrewhoffman
@joshuaandrewhoffman
So it sounds like you want your server state to be the one true state for everyone
yeah
joshuaandrewhoffman
@joshuaandrewhoffman
You probably don't even need to leverage that then
Client side socket io can know what page I'm on, server can just socket.emit(new data)
Mike DeVita
@mikedevita
yup right now sailsjs uses pubsub so any time a model updates it broadcasts via socketse that update
so its automatic on server side
client side just needs to subscribe to the appropriate channel
joshuaandrewhoffman
@joshuaandrewhoffman
Hmm okay I might be missing something then. Haven't used sails
Mike DeVita
@mikedevita
sailsjs just provides a helper basically that whenever a model changes it pushes a message to all subscribed clients
joshuaandrewhoffman
@joshuaandrewhoffman
If it were pure socket-io or socketio-redux my approach is what I'd use. Sails sounds like it makes stuff work a little more like firebase or meteor?
Mike DeVita
@mikedevita
kind of?
joshuaandrewhoffman
@joshuaandrewhoffman
Okay
Mike DeVita
@mikedevita
sails doesnt care where/how the update comes from it could be via http POST to the api
or via a socket.io connection
joshuaandrewhoffman
@joshuaandrewhoffman
Ooh that's kinda nice
Okay so your only question is just one of organization on the server side? Like where should the code live?
Mike DeVita
@mikedevita
client side
where would you put the things like
socket.on('server-update', function(server) {
  // do something with the updated server info
 // maybe dispatch a thunk action?
});
joshuaandrewhoffman
@joshuaandrewhoffman
I think that package I mentioned has it right about how to do this. I. Had the name wrong though, it's: https://www.npmjs.com/package/redux-socket.io
Mike DeVita
@mikedevita

right now i have things like ...

socket.on('connected', function () {
    // dispatch(socket.connected(socketId)
   // console.log('connected to backend')
});
socket.on('disconnected', function () {
    // dispatch(socket.connected(socketId)
   // console.log('connected to backend')
});

in my store/socket.js file and i call socket.connect() in my appcontainer.js onMount()

joshuaandrewhoffman
@joshuaandrewhoffman
it might conflict with sails on the client->server aspect but you could use the same principle
Mike DeVita
@mikedevita
sails just adds http capable wrappers into socket.io so i can do something like io.sails.get|post|put|delete()
joshuaandrewhoffman
@joshuaandrewhoffman
Might be ok then
I really like what redux-socketio
Mike DeVita
@mikedevita
ill check it out