Javascript 将变量值传递给客户端并存储在全局变量中
我对socket.io还是新手,我试图将一个值传递到服务器端,并将其存储在一个全局变量中,然后我可以使用该变量对ARI执行一些逻辑操作 因此,在我的服务器端,我有:Javascript 将变量值传递给客户端并存储在全局变量中,javascript,jquery,node.js,express,socket.io,Javascript,Jquery,Node.js,Express,Socket.io,我对socket.io还是新手,我试图将一个值传递到服务器端,并将其存储在一个全局变量中,然后我可以使用该变量对ARI执行一些逻辑操作 因此,在我的服务器端,我有: io.sockets.on('muting', function (data) { mute = data; console.log("client side:" + mute); }); 为清晰起见,完整的服务器端代码: var ari = require('ari-client'); var util = re
io.sockets.on('muting', function (data) {
mute = data;
console.log("client side:" + mute);
});
为清晰起见,完整的服务器端代码:
var ari = require('ari-client');
var util = require('util');
var chanArr = [];
var test;
var mute;
var express = require('express'),
app = express(),
server = require('http').createServer(app),
io = require('socket.io').listen(server);
//ARI client
ari.connect('http://localhost:8088', 'asterisk', 'asterisk', clientLoaded);
function clientLoaded(err, client) {
if (err) {
throw err;
}
// find or create a holding bridges
var bridge = null;
client.bridges.list(function (err, bridges) {
if (err) {
throw err;
}
bridge = bridges.filter(function (candidate) {
return candidate.bridge_type === 'mixing';
})[0];
if (bridge) {
console.log(util.format('Using bridge %s', bridge.id));
} else {
client.bridges.create({
type : 'mixing'
}, function (err, newBridge) {
if (err) {
throw err;
}
bridge = newBridge;
console.log(util.format('Created bridge %s', bridge.id));
});
}
});
// handler for StasisStart event
function stasisStart(event, channel) {
console.log(util.format(
'Channel %s just entered our application, adding it to bridge %s',
channel.name,
bridge.id));
channel.answer(function (err) {
if (err) {
throw err;
}
bridge.addChannel({
channel : channel.id
}, function (err) {
var id = chanArr.push(channel.name)
console.log("Value: " + test);
test = channel.name;
updateSip);
if (err) {
throw err;
}
//If else statement to start music for first user entering channel, music will stop once more than 1 enters the channel.
if (chanArr.length <= 1) {
bridge.startMoh(function (err) {
if (err) {
throw err;
}
});
} else if (chanArr.length === 2) {
bridge.stopMoh(function (err) {
if (err) {
throw err;
}
});
} else {}
});
});
}
// handler for StasisEnd event
function stasisEnd(event, channel) {
console.log(util.format(
'Channel %s just left our application', channel.name));
console.log(channel.name);
var index = chanArr.indexOf(channel.name);
chanArr.splice(index, 1);
updateSip();
}
client.on('StasisStart', stasisStart);
client.on('StasisEnd', stasisEnd);
client.start('bridge-hold');
}
//Socket.io logic here
server.listen(3009, function () {
console.log('listening on *:3009');
});
app.use(express.static(__dirname + '/public'));
app.get('/', function (req, res) {
res.sendfile(__dirname + "/testPage.html");
});
io.sockets.on('connection', function (data) {
updateSip();
});
io.sockets.on('muting', function (data) {
mute = data;
console.log("client side:" + mute);
});
function updateSip() {
console.log("Value: " + test);
io.sockets.emit('sip', chanArr);
}
完整客户端代码:
jQuery(function ($) {
var socket = io.connect();
var mute = false;
var $sip = $('#sip');
socket.on('sip', function (data) {
var sip = '';
$(".exe").remove();
for (i = 0; i < data.length; i++) {
sip += data[i];
if (sip) {
$sip.append('<tr class="exe">\
<td>' + sip + '</td>\
<td><button class="btn btn-default mute" id="kick" type="submit">Mute</button></td>\
<td><button class="btn btn-default kick" id="kicks" data-toggle="modal" data-target="#myModal" type="submit">Kick</button></td>\
</tr>');
} else {
$sip.append('Currently no extensions');
}
sip = '';
}
});
$('.kick').click(function () {
$('#myInput').focus()
});
$(document).on('click', '#kick', function () {
mute = !mute;
socket.emit('muting', mute);
console.log(mute)
});
});
jQuery(函数($){
var socket=io.connect();
var=false;
var$sip=$(“#sip”);
socket.on('sip',函数(数据){
var-sip='';
$(“.exe”).remove();
对于(i=0;i
我错过了一件很小的事情,但我却无法理解
编辑:我没有收到错误消息,似乎出于某种原因根本没有传递信息服务器端
我在用快车
亲切的问候
var socket = io.connect();
不,您没有到达您的服务器
//Socket.io logic here
server.listen(3009, function () {
console.log('listening on *:3009');
});
您的套接字服务器似乎正在侦听端口3009,因此您必须告诉您的客户端服务器在哪里(路径->ex:)以及到达服务器的端口
尝试使用以下内容更新客户端:
io.connect("wss://" + document.location.hostname + ':' + 3009);
从套接字io文档:
您可以尝试将事件侦听器包装到'connection'
事件侦听器中。请注意,您将使用'connection'
事件中的socket
参数收听'muting'
服务器端:
io.sockets.on('connection',function (socket) {
updateSip();
socket.on('muting', function (data) {
mute = data;
console.log("client side:" + mute);
});
});
您遇到错误了吗?@VC1无,只是使用console.log查看函数是否运行。似乎我没有到达it服务器端,否则它将到达那里的console.log,而它没有。它只在客户端登录,这让我明白我没有通过socket.io正确地传递它。不确定我做错了什么。你应该从服务器端提供更多的代码。@Anonymous0day提供了整个服务器端代码,现在更新问题。请在
io.sockets.on
之后、在updateSip()之前尝试console.log代码>确保您到达服务器什么?这是否意味着,我正在到达it服务器端。否则,我现有的功能都不起作用,我不明白这是怎么回答的=/我不明白这是怎么回答的,我已经有了路径…注意,我使用的是express,但我尝试了你的建议,结果在各个方面都与以前完全相同,因此我不确定该怎么做:(我的网页在有或没有(“wss://“+document.location.hostname+”:“+3009)”的情况下都可以正常工作;
只是为了澄清一点,我的问题不是连接服务器端,而是将值传递给服务器端并将其存储在全局变量中。var socket=io.connect();
这是完整客户端代码中的第二行:没有路径可能会用您的数据更新我的示例:http而不是wss,服务器的路径而不是document.location.hostname。结果完全一样,我已经在客户端应用了您建议的更改,但没有任何更改。它仍然像当我应用它的时候,它以前做过。我也做过相应的更新。这很好,非常感谢!当我将来需要向服务器传递任何数据时,这应该会帮助我。是的,因为io.sockets与socket不是同一个对象。io.sockets都是sockets,socket是特定的socket…这很有意义,我对它还是相当陌生的所以这应该是一个巨大的帮助。
io.sockets.on('connection',function (socket) {
updateSip();
socket.on('muting', function (data) {
mute = data;
console.log("client side:" + mute);
});
});