我正在尝试在node.js中为服务器编写代码,其中,在浏览器上运行的客户端会在发生某些“.on”事件时向服务器发送一些数据。现在在服务器端,任务是接收来自客户端的数据并将数据发送回客户端。
我正在使用socket.io。 现在写我正在这样做, 客户方:
<p id="ValSlider1"> Curr Val </p>
<input class = "mySlider1" type="range" name="slider" id="slider-0" value="0" min="0" max="100" />
<script>
var socket = io.connect('http://localhost');
$(".mySlider1").change(function() {
var sVal = $(this).val();
socket.emit('ValSlider1', sVal);
console.log('ValSlider1: ' + sVal );
});
socket.on('packet', function (data) {
var valFromServer = data.split('-');
document.getElementById("ValSlider1").innerHTML = valFromServer[0];
document.getElementById("ValSlider2").innerHTML = valFromServer[1];
document.getElementById("ValSlider3").innerHTML = valFromServer[2];
document.getElementById("ValSlider4").innerHTML = valFromServer[3];
$('#container1').html(data);
});
并在服务器端:
var qs = require('querystring'),
fs = require('fs'),
parser = new require('xml2json'),
urr = require('url'),
app= require('http').createServer(handler).listen(3000),
io = require('socket.io').listen(app);
function handler (req, res) {
var reqObj = urr.parse(req.url, true);
var reqPath = reqObj.pathname;
if ('/' == reqPath ) {
res.writeHead(200, {'Content-Type': 'text/html'});
fs.readFile(__dirname + '/client.html', function(err, data) {if (err) {res.writeHead(500);
return res.end('Errorloadingclient.html');
}
res.end(data);
});
}
};
var slider1, slider2, slider3, slider4 ;
io.sockets.on('connection', function(socket) {
socket.on('ValSlider1', function(data){
slider1 = data ;
socket.emit('packet', data);
console.log("Slider 1 Value: " + data);
});
});
setInterval(function () {
var data = slider1 + "-" + slider2 + "-" + slider3 + "-" + slider4;
socket.emit('packet', data);
console.log(data);
},1000);
});
app.maxConnections = 1;
现在,当通信开始时,服务器接收到两到三个滑块更改值并在控制台上打印,但随后值不会更新,服务器仅将以前的值发送给客户端。 另外,如果我使用socket.emit('ValSlider1',sVal);两次在客户端它工作得更好,但为什么它需要发出两次无法找到,任何帮助将赞赏。 感谢。
答案 0 :(得分:3)
最后我设法以这种方式做到了, 在服务器端
app= require('http').createServer(handler).listen(3000),
io = require('socket.io').listen(3001);
publisher = require('socket.io').listen(app);
在客户端
var socket = io.connect('http://localhost:3001');
var socket2 = io.connect('http://localhost');
客户端将'socket'上的数据发送到服务器,响应服务器也会在同一端口上发送一些数据。同时,服务器将每隔1秒间隔在3001端口上发布数据,该间隔在客户端的“.on('data')”server1上发生。