首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在socket.io node.js上以两种方式同时通信

如何在socket.io node.js上以两种方式同时通信
EN

Stack Overflow用户
提问于 2013-12-21 07:24:42
回答 1查看 2.2K关注 0票数 0

当某些事件触发时,我想向node.js服务器发送一些数据。同时,服务器应该每1秒向客户端发送一些数据。为此,我使用了socket.io。下面是我的代码:服务器端:

代码语言:javascript
复制
app= require('http').createServer(handler).listen(3000),
io = require('socket.io').listen(app);

// request handler function, will send client file which include sliders and graph    
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) {

// receive changed value of slider send by client
socket.on('ValSlider1', function(data){
slider1 = data ;
console.log("Slider 1 Value: " + data);    });
// same for three more sliders    });
// send received values back to client after every 1 second interval

setInterval(function () {
var data = slider1 + "-" + slider2 + "-" + slider3 + "-"    + slider4; 
socket.emit('packet', data);
},1000);    });    
app.maxConnections = 1;

客户端:

代码语言:javascript
复制
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script type="text/javascript"
src="http://smoothiecharts.org/smoothie.js"></script>

// slider 
<p id="ValSlider1"> Curr Val </p>
<input class = "mySlider1" type="range" name="slider" id="slider-0" value="0"     min="0"     max="100" />

//类似于另外三个滑块数据包

代码语言:javascript
复制
var socket = io.connect('http://localhost');

// send changed value to server
$(".mySlider1").change(function() {
var sVal = $(this).val();
socket.emit('ValSlider1', sVal);
});

//类似于另外三个滑块

代码语言:javascript
复制
socket.on('packet', function (data) {
var valFromServer = data.split('-');
document.getElementById("ValSlider1").innerHTML =   valFromServer[0];
});

</script>

现在,只有在客户机中两次使用'socket.emit()‘时,服务器端才能获得数据,其中服务器以1秒的间隔发送数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-29 14:01:13

最后,我设法这样做,在服务器端。

代码语言:javascript
复制
app= require('http').createServer(handler).listen(3000),
io = require('socket.io').listen(3001);
publisher = require('socket.io').listen(app); 

在客户端

代码语言:javascript
复制
var socket = io.connect('http://localhost:3001');
var socket2 = io.connect('http://localhost');

客户端将在“套接字”上向服务器发送数据,响应服务器也将在同一端口上发送一些数据。同时,服务器将在3001端口上发布server1的“server1(‘data’)”事件中每1秒一次在客户端接收的数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20716657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档