2016-04-07 16 views
0

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); 

cevap

2

tek dişli doğa sorunlu olacaksa ne öyle. Her tam önler kod bloğu güçlü bir şekilde izole edilmiştir, yani başka bir kod olamaz "paralel" olarak çalıştırın.

+0

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? –

+0

@DaverMuzaffar Evet, tam olarak. Talep 1 tamamlanana kadar iş kuyruğa alınacak ve sıralarını bekleyecekler. – freakish

+0

teşekkürler, çok takdir –

İlgili konular