Подтвердить что ты не робот

Отправить дополнительные данные о соединении сокетов

Как лучше отправлять дополнительные данные при подключении сокетов?

Клиент:

socket.on('connect',function(){ 
//I'd like set some values and pass them up to the node server.
});

Node.js Сервер:

io.on('connection', function(client){
//I'd like to get the data here.
});

Например, отправьте имя пользователя или адрес электронной почты и т.д.

4b9b3361

Ответ 1

Вы должны отправить свои данные либо в connect, либо при создании:

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" });

С новой версией socket.io на сервере произошли изменения:

var io = require('socket.io')(server);

io.use(function(socket, next) {
  var handshakeData = socket.request;
  console.log("middleware:", handshakeData._query['foo']);
  next();
});

Ответ 2

У меня другой подход - выпустите событие сразу после подключения, с данными:

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) {
    });
});

Вы можете сохранить переменную/объект и сказать, что при отсутствии события ehlo с данными другие события игнорируются до тех пор, пока не будет отправлено сообщение ehlo.

Если это не удовлетворяет, вы можете отправлять данные прямо при подключении, я не буду копировать код, но он находится в этом ответе: fooobar.com/questions/102173/...

Ответ 3

События connection запускаются, как только устанавливается соединение TCP. Нет никакого способа отправить что-либо между ними.

Что вы можете сделать, так это просто перенести первое сообщение на сервер и поместить данные в это сообщение. Я бы настоятельно рекомендовал перевести тонкий протокол для этого, поэтому у вас будет несколько типов сообщений и используйте их для определения того, как код должен обрабатывать данные.

Это было бы более расширяемым, так как для этого достаточно просто создать общую архитектуру. Если вы хотите дождаться появления userdata, вы можете просто добавить какое-то состояние в свои соединения.

Ответ 4

Я нашел ответ, который здесь очень полезен: Отправить пользовательские данные вместе с handshakeData в socket.io?

Также очистка в следующей документации помогает объяснить способы привязки переменных к объекту рукопожатия, к которым можно получить доступ из объекта сокета во время соединения: https://github.com/LearnBoost/socket.io/wiki/Authorizing#global-authorization

Ответ 5

этот мой код для отправки данных запроса узлам и серверу server.io server

var socket = io.connect(window.location.origin,{query:'loggeduser=user1'});

io.sockets.on('connection', function (socket) {
    var endp = socket.manager.handshaken[socket.id].address;
    console.log("query... " +  socket.manager.handshaken[socket.id].query.user);
});

запрос... user1