[英]node.js websocket chat to handle parallel colors
我正在做一些需要聊天应用程序的项目。 我决定在此处测试一些node.js / websocket版本: http : //martinsikora.com/nodejs-and-websocket-simple-chat-tutorial
一切都完美,但是正如他在本教程结尾提到的那样:
与Apache不同,Node.js并不为每个连接使用进程。
这意味着在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.');
是否可以允许两个用户使用相同的颜色? 谢谢
您最好只是在每个请求上随机选择一种颜色(这意味着您不必预先对colors数组进行随机组合)。 是的,这意味着有时两个连续的用户将获得相同的颜色; 那是真正随机性的固有属性,而不是人们错误地想象随机性是什么。
您不应该使用Array.shift(),因为它会从colors数组中删除一个元素,因此基本上在7个用户之后,您的数组为空。
只是生成一个随机ID
var idx = Math.floor(Math.random()*colors.length)
.....
({ type:'color', data: colors[idx] })
完成后:
usercolor = colors.shift();
添加此行:
colors.push(usercolor);
这会将返回的颜色放回另一端的数组中。 最终结果是它将一遍又一遍地循环显示您的七种颜色。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.