nodejs ile basit bir sohbet sunucusu (uygulama) oluşturmaya çalışıyorum. Genel bir var sohbetim var, ve sunucuya yapılan tüm istekler tarafından değiştirilebilir veya okunabilir. Muhtemelen bazı yarış koşullarına neden olup olmayacağımı anlamaya çalışıyorum. Ayrıca düğüm net modülü üzerinden yuvaları kullanıyorum. A kullanıcısı sohbet odası çamurluğunu katılır:Bu bir yarış durumu olup olmadığını söyleyemiyorum
var net = require('net');
var chatRooms = {fender:[]};
function enterRoom(socket, room){
charRooms[room].push(socket.username);
}
function leaveRoom(socket, room){
var indexOfUser = chatRooms[room].indexOf(socket.username);
chatRoom[room].splice(indexOfUser, 1);
}
bu yüzden, ben bu durumu anlamaya çalışıyorum - sohbet odası benziyor {çamurluğun: [ 'A']} kullanıcı B katıldı sohbet odası çamurluk: - sohbet odası görünüyor {fender: ['A', 'B']}
kullanıcı B ve A, odadan ayrılmak ve aynı zamanda bunu yapmak ister: user B indexOfUser === 1; user A indexOfUser === 0; kullanıcı Bir kullanıcı birleşimi, B kullanıcısından önce sohbet var. küresel ChatRoom var şimdi (çamurluğun benziyor. [ 'B']} kullanıcı B indexOfUser artık === 1 böylece kullanıcı B ekleri Sohbet odaları çok yanlış dizini kullanarak yapacak zaman
Böyle bir şey var mı olası veya düğümün tek dişli doğa bunun olmasını engeller.
anlamaya olamaz çıktı bu iki kod satırları düğümün
var indexOfUser = chatRooms[room].indexOf(socket.username);
// another request alters charRooms before the next line of code is reached.
chatRoom[room].splice(indexOfUser, 1);
Sanırım anladım, eğer istek 1 şu anda leaveRoom() işlevinde ise ve aynı anda bir sohbet odasından ayrılmak için birkaç istek daha geldiğinde, bu yeni talepler yalnızca sunulacak bir kez istek 1 yapılır? –
@DaverMuzaffar Evet, tam olarak. Talep 1 tamamlanana kadar iş kuyruğa alınacak ve sıralarını bekleyecekler. – freakish
teşekkürler, çok takdir –