2013-12-21 4 views
3

node.js에 서버용 코드를 작성하려고하는데 브라우저에서 실행중인 클라이언트가 일부 ".on"이벤트가 발생하면 서버에 데이터를 전송합니다. 나오다. 이제 서버 측에서는 클라이언트에서 오는 데이터를 수신하여 해당 데이터를 클라이언트에 다시 보냅니다.socket.io node.js에서 서버와 클라이언트 간의 양방향 통신

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; 

는 통신이 처음 시작 2-3 슬라이더 변화 값이 수신 쓰기는 지금은, 클라이언트 사이드로이 일을하고있다 서버에 의해 인쇄되고 콘솔에 인쇄되었지만 값이 업데이트되지 않으면 서버는 이전 값만 클라이언트에 전송합니다. 또한 socket.emit ('ValSlider1', sVal)을 사용하면; 클라이언트 측에서 두 번 더 잘 작동하지만 왜 두 번씩 emit을 찾을 필요가 없으면 어떤 도움도받을 수 있습니다. 감사합니다. .

+0

이 자습서를 보시려면 http://www.williammora.com/2013/03/nodejs-tutorial-building-chatroom-with.html –

+1

이 내용은 Socket.io – meagar

+1

@meagar의 모든 자습서에서 다룹니다. 그렇다고해서 문제가 덜 유효하지는 않습니다. 답변을 제공하십시오. – Brad

답변

3

마침내 내가 응답 서버에

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

클라이언트 '소켓'에 서버로 데이터를 전송합니다 클라이언트 측에서 서버 측

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

에서이 방법으로 그것을 어떻게 관리 할 것 또한 동일한 포트에서 일부 데이터를 보냅니다. 동시에 server는 server1의 ".on ('data')"이벤트에서 클라이언트에 수신 된 1 초 간격으로 3001 포트의 데이터를 게시합니다.

+0

이것이 실제로 귀하의 물음표에 대한 대답으로 받아 들여지는 경우 :) –

관련 문제