編輯:我的第一個問題已經解決(相當簡單)。第二個問題仍然有效,對於這個問題,我不知道如何解決問題。Socket.io和Nodejs:向多個客戶端發送響應並更改未保存(?)
我正在製作多人數獨遊戲。我是Nodejs和套接字的新手,如果我的思路錯誤,請糾正我的錯誤。
這是一個正在進行的工作,這裏是我現在要做的:當用戶向其中一個單元格輸入值時,它會使用該單元格的索引向服務器發出請求(?)。然後服務器從它的答題卡中找到正確的答案,並將結果發送回客戶端。然後,javascript代碼會一直如此,如果輸入的是正確的輸入,它會將所有用戶的答案都寫入(注意:我假設用戶正在輸入正確的答案;之後我將處理錯誤的答案部分 )。
的問題:
1)眼下,正確答案將鎖定在誰在小區提交正確答案的人,但它不會顯示所有的客戶。
2)如果我提交的答案,另一個單元格(無論正確與否),它會刪除過去的變化 - 也就是說,用戶預先輸入併成爲「鎖定」
這裏是小區我的javascript代碼:
function closeCellInput($cell) {
var index = $boardCells.index($cell);
// var target = findTarget(index); //SHOULD BE SERVER
socket.emit('target', index);
socket.on('targetResult', function(data){
console.log('data: ' + data);
var target = data;
var number = $cell.find('input').val();
var complete = false;
$cell.empty().removeClass('empty').removeClass('solved').attr('style', null);
socket.emit('index', index);
if (number == target) {
$cell.text(number).addClass('solved');
complete = true;
socket.emit('solved', number);
//complete = checkComplete();
}
else if (number != '') {
var cell = $cell[0];
var animator = new Animator({duration:750});
var animation = new ColorStyleSubject(cell, "background-color", "#FF8888", "#FFFFFF");
$cell.text('').addClass('empty');
animator.addSubject(animation).play();
//$cell.html('<input type="text"/>').find('input').focus();
//adding above line does not make the red light blinkerino
}
else {
$cell.text('').addClass('empty');
}
$selected = $([]);
});
}
這裏是我的相關服務器的代碼(如果需要):
io.on('connection', function(socket){
console.log('a user connected');
socket.on('disconnect', function(){
console.log('user disconnected');
});
socket.on('solved', function(val){
console.log('number value: ' + val)
});
socket.on('target', function(index){
//Hard coded answers for now, but will be changed later
var solution = "435269781682571493197834562826195347374682915951743628519326874248957136763418259";
console.log('index: ' + solution[index]);
socket.emit('targetResult', solution[index]);
});
});
在此先感謝!
它不會出現,你是任何廣播事件發送給服務器代碼中的所有客戶端。你有沒有忽略這個部分?可能的解釋#1 編輯:爲了澄清,似乎你的來自服務器的「響應」事件只發射到發起它們的客戶端。 –
我以爲是這樣。我該如何去向所有客戶播放活動?我是Node和Socket的新手,所以我不太確定如何做到這一點。 編輯:我解決了廣播問題(而不是簡單地實際上哈哈)。 – FudgeNouget
要*所有*客戶,或只在特定的*房間*?以下是相關文檔的相關部分。 HTTP://插座。io/docs/rooms-and-namespaces/ 或者,最簡單的說,'io.sockets.emit()' –