我正在编写一个包含setInterval函数的socket.io程序。 但我一直得到错误的答案,然后我写了一个基本的设置,有2个计数器,一个客户端和一个服务器端,每500ms必须刷新,但只有客户端在控制台中记录数据。就像setInterval阻止其他代码一样运行。
这是代码
服务器。
>> @formula.operands.all
=> #<ActiveRecord::AssociationRelation []>
>> @formula.operands.first
=> nil
>> params
=> {"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"--TOKEN--", "formula"=>{"name"=>"Sdfg", "operands_attributes"=>{"1457352032591"=>{"operator"=>"+", "numeric_operand"=>"3"}}}, "commit"=>"Update Formula", "action"=>"update", "controller"=>"formulas", "locale"=>"en", "id"=>"3"}
>>
客户端
io.on('connect', function(socket){
console.log("test");
io.sockets.on('count', function (data) {
console.log(data);
});
setInterval(function(){var count=0;
for (i = 0; i < 10; i++) {
count = count + 1;
socket.emit('count', count);
}},500);
});`
我知道我之后必须清理我的setInterval,但这段代码只是出于测试原因
答案 0 :(得分:0)
请在日志中找到相同的解决方案以及更多详细信息: -
server.js
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
io.on('connection', function(socket){
socket.on('count', function(data){
// client message will be logged here
console.log(" client message " + data);
});
setInterval(function(){var count=0;
for (var i = 0; i < 10; i++) {
count = count + 1;
socket.emit('count', " server count " + count);
console.log(" server message " + count); // this i server message sent to client
}},500);
});
http.listen(3000, function(){
console.log('listening on *:3000');
});
和client script
var socket = io();
// Add a connect listener
socket.on('connect',function() {
console.log('Client has connected to the server!');
});
// Add a disconnect listener
socket.on('disconnect',function() {
console.log('The client has disconnected!');
});
var count=0;
socket.on('count', function(data){
console.log("server message" + data); // this is message come from server
});
for(var i=0;i<10;i++){
count = count +1;
socket.emit('count',count); // client sends this information to server.
}
您的解决方案是正确的,但请注意,当客户端发出消息时,它将显示在节点终端或控制台上,当服务器发出时,它将在浏览器控制台上显示。
希望这会对你有所帮助。