【问题标题】:Two way communication between server and client on socket.io node.jssocket.io node.js上服务器和客户端之间的两种方式通信
【发布时间】:2019-07-12 00:07:57
【问题描述】:

我正在尝试在 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);在客户端两次它工作得更好,但为什么它需要发出两次无法找到,任何帮助将不胜感激。 谢谢。

【问题讨论】:

  • 看看这个教程williammora.com/2013/03/…
  • @meagar 这并没有降低问题的有效性。提供答案。
  • @meagar 你不知道 ashok 没有尝试研究这个。我的猜测是进行了尝试。我不认为这个问题是微不足道的。

标签: javascript node.js


【解决方案1】:

我终于设法以这种方式做到了:

在服务器端:

var app = require('http').createServer(handler).listen(3000),
var io = require('socket.io').listen(3001);
var publisher = require('socket.io').listen(app); 

在客户端:

var socket = io.connect('http://localhost:3001');
var socket2 = io.connect('http://localhost');

客户端将通过“socket”向服务器发送数据。作为响应,服务器也会在同一个端口上发送一些数据。服务端会每秒不断地向 3001 端口推送数据,客户端通过 server1 的 ".on('data')" 事件接收到这些数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-29
    • 2013-06-13
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    相关资源
    最近更新 更多