Я пытаюсь создать игру в реальном времени и потоковое обновление через node.js и sockets.io для клиента.Почему мои события socket.io проходят через куски?
Я использую последний браузер Chrome, но я тоже пробовал в FF.
Весь серверный код корректно регистрируется на консоли, поэтому я знаю, что время там хорошее, но на клиенте кажется, что сообщения поступают в «куски», а не потоки.
Сервер:
var util = require("util");
var io = require("socket.io");
var socket = io.listen(8000);
init() {
socket.sockets.on("connection", onSocketConnection);
};
function onSocketConnection(client) {
util.log("New player has connected: " + client.id);
client.on("disconnect", onClientDisconnect);
client.on("getMatchupUpdates", onUpdateMatchup);
};
/* I'm calling an edge.js function to perform game stuff with a callback
to a js function 'onUpdateTime' to update a game clock on the client browser*/
function onUpdateTime(data)
{
console.log(data);
socket.emit("update time", data);
}
console.log производит ожидаемый результат в 500мс:
{ gameID: 77, secondsRemaining: 10 }
{ gameID: 77, secondsRemaining: 10 }
{ gameID: 77, secondsRemaining: 9 }
{ gameID: 77, secondsRemaining: 9 }
{ gameID: 77, secondsRemaining: 8 }
....
Так что я знаю, что обратный вызов получает обратно на сервер Node.js, а затем вызвать к клиенту :
function onUpdateTime(data) {
console.log("received Time Update: ");
console.log(data);
$('#clockTimer').text(data.secondsRemaining);
}
Я получаю сообщения в «кусках». Данные поступают через в правильном формате, но, кажется, что WebSockets будет падать обратно на опрос:
http://localhost:8000/socket.io/?EIO=3&transport=polling&t=1435865813074-17&sid=WaNEY1UQUdkx6RLfAAAA
Консоль журналирующего правильно, но опять же, на куски, а не поток ...
> HTML1.html:802 Object {gameID: 77, secondsRemaining: 7}
> HTML1.html:802 received Time Update:
> HTML1.html:803 Object {gameID: 77, secondsRemaining: 7}
> HTML1.html:802 received Time Update:
> HTML1.html:803 Object {gameID: 77, secondsRemaining: 6}
> HTML1.html:802 received Time Update:
> HTML1.html:803 Object {gameID: 77, secondsRemaining: 6}
Любые советы? Мысли? Дополнительные потребности?
** UPDATE: ** Я добавил край вызова здесь:
//set up update callback
var payload = {
matchupID: data.id,
updateTime: function (input, callback) {
callback(null, onUpdateTime(input));
},
updateScore: function (input, callback) {
callback(null, console.log(input));
},
updateGameBoard: function (input, callback) {
callback(null, console.log(input));
}
};
GetUpdates(payload, function (error, result) {
if (error) throw error;
console.log(result);
});
стоит отметить, я также изменен на код, чтобы испустить сообщение обратного вызова:
//set up update callback
var payload = {
matchupID: data.id,
updateTime: function (input, callback) {
callback(null, socket.emit("update time", input));
},
updateScore: function (input, callback) {
callback(null, console.log(input));
},
updateGameBoard: function (input, callback) {
callback(null, console.log(input));
}
};
и в итоге было исключение переполнения стека ...
FWIW: Я проверил фиктивный контур, который только что отправил сообщения клиенту через 500 мс через сокет, и он работал нормально, поэтому я не уверен, где находится удержание. Любое понимание было бы оценено. – TomO