Поэтому я хотел был бы иметь возможность запускать пользовательскую функцию через socket.io, используя узел . Моя основная идея довольно проста, я просто не могу заставить ее работать. Вообще говоря, можно было бы написать что-то похожее на это, чтобы запустить функцию на входящем сообщении ...Выполнение пользовательских функций с узлом и socket.io
//server
socket.on('incomingMessage', function(data) {
console.log(data);
io.sockets.emit('newMessage', {id: data.id, from: data.name, message: data.message});
});
//client
socket.on('newMessage', function(data) {
$('#messages').html($('#messages').html() + data.message);
$('#from').html($('#from').html() + data.from);
});
но то, что я хотел бы сделать, это позволить, чтобы быть намного более динамичным и фактически передать функции, я хочу, чтобы запустить в самом сообщении, так что-то вроде этого ...
//server
socket.on('customFunction', function(data) {
console.log(data);
io.sockets.emit('runFunction', data);
})
//client
socket.on('runFunction', function(data) {
for(var index in data) {
args.push(data[index]);
}
data.fn.apply(this, args);
});
, но когда я называю это от клиента, используя что-то вроде ...
socket.emit('customFunction', {id: sessionId, name: user.name, callBack: function() { alert('it worked');
}
});
на сервере единственное, что logs - это идентификатор сеанса и имя, callBack (независимо от имени, я попробовал func, run, cb, callBack, customFunc) просто исчезает. так что я немного растерялся. У кого-нибудь есть идеи? заблаговременно за помощь. Я не уверен, почему, но при вызове этого он только регистрирует идентификатор сеанса и элементы имени, обратный вызов или fn или что-то еще, просто нет. Удаляет ли узел или socket.io функции из аргументов при отправке данных?
нет такой удачи. Я изменил код, так что у клиента просто есть socket.on ('runFunction', функция (данные) { data.fn.apply (это, данные); }}) , но когда я называю это журналами сервера только {"id": "-sasf9akdn"}, так что fn даже не попадает на сервер. каким-то узким узлом или сокетом его запускает и удаляет из отправляемых данных – Rob
console.log (данные) и видит, что происходит – raam86
Я сделал это на обоих серверах в socket.on (функция customFunction '..., которая только регистрирует " {id: "fdsicnsdev4a"} "при вызове с ... socket.emit ('customFunction', {id: sessionId, fn: function() {alert ('something');}}); и клиент записывает то же самое, fn просто ушел – Rob