How to best send additional data upon socket connection?
Client:
socket.on('connect',function(){ //I'd like set some values and pass them up to the node server. });
Node.js Server:
io.on('connection', function(client){ //I'd like to get the data here. });
For example sending a user name or email address etc.
As of v3, socket.io has a default message limit of 1 MB. If a message is larger than that, the connection will be killed.
Both server and client node processes use 95-100% of a CPU core each. So pure throughput looks ok. I can emit 100 messages per second to 100 local clients at 55% CPU usage on the server process.
As said before, Socket.IO can fall back to technologies other than WebSockets when the client doesn't support it. If (for some reason) a WebSocket connection drops, it will not automatically reconnect… but guess what? Socket.IO handles that for you! Socket.IO APIs are built to be easier to work with.
I have a different approach - emit an event right after connecting, with the data:
socket.on('connect',function(){ // Send ehlo event right after connect: socket.emit('ehlo', data); }); io.on('connection', function(client){ // Receive ehlo event with data: client.on('ehlo', function(data) { }); });
You can hold a variable/object, and say, when there is no ehlo
event with data, the other events are ignored until ehlo
is sent.
If this does not satisfy, you can send data right when connecting, I won't copy the code but it is in this answer: https://stackoverflow.com/a/13940399/1948292
You should send your data either in connect or on create:
var s = io('http://216.157.91.131:8080/', { query: "foo=bar" }); s.connect(); var c = io.connect('http://216.157.91.131:8080/', { query: "foo=bar" });
With the new version of socket.io, on server is where the things have been changed:
var io = require('socket.io')(server); io.use(function(socket, next) { var handshakeData = socket.request; console.log("middleware:", handshakeData._query['foo']); next(); });
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With