2012-09-09 2 views
0

일부 채팅 응용 프로그램이 필요한 프로젝트에서 작업 중입니다. 나는 여기에 몇 가지 Node.js를/웹 소켓 버전을 테스트하기로 결정 아파치는 달리node.js 병렬 색상을 처리하는 websocket 채팅

Node.js를가 프로세스를 사용하지 않습니다 http://martinsikora.com/nodejs-and-websocket-simple-chat-tutorial

모든 것이 완벽하게 작동을하지만, 그는 튜토리얼의 마지막에 언급로 각 연결.

7 명의 사용자가 로그인하면 하드 코딩 된 모든 색상이 사용 된 다음 사용자 이름 스타일에 흰색이 사용됩니다.

// Array with some colors 
var colors = [ 'red', 'green', 'blue', 'magenta', 'purple', 'plum', 'orange' ]; 
// ... in random order 
colors.sort(function(a,b) { return Math.random() > 0.5; }); 

userName = htmlEntities(message.utf8Data); 
// get random color and send it back to the user 
    userColor = colors.shift(); 
    connection.sendUTF(JSON.stringify({ type:'color', data: userColor })); 
    console.log((new Date()) + ' User is known as: ' + userName 
      + ' with ' + userColor + ' color.'); 

두 명의 사용자가 같은 색을 사용하도록 허용 할 수 있습니까? 감사합니다.

+0

.shift() 메서드 대신 .indexOf()를 사용하면 어떻게됩니까? – CBeTJlu4ok

답변

0

사용자가 색상 배열에서 요소를 제거하므로 Array.shift()를 사용하면 안됩니다. 따라서 7 명의 사용자가 배열을 비운 후에 기본적으로 요소가 제거됩니다.

은 수행 한 후 임의의 ID

var idx = Math.floor(Math.random()*colors.length) 
..... 
({ type:'color', data: colors[idx] }) 
1

각 요청마다 무작위로 색상을 선택하는 것이 좋습니다 (즉, 색상 배열을 미리 셔플 할 필요가 없음). 네, 때로는 두 명의 연속적인 사용자가 동일한 색상을 얻는다는 의미입니다. 그것은 사람들이 실수로 임의성을 상상하는 것보다는 실제 임의성에 내재 된 특성입니다.

0

을 생성합니다

colors.push(usercolor); 

이 다른 끝에서 배열로 다시 돌아 색상을두고 :

usercolor = colors.shift(); 

이 줄을 추가 . 최종 결과는 일곱 가지 색상을 반복해서 반복합니다.

관련 문제