在Node.js中为不同的浏览器提供不同的数字变量

时间:2016-01-27 10:44:29

标签: javascript html node.js

我想给每个客户提供不同的号码。当我点击第一个浏览器上的按钮时,它必须说usernumber is 1,当我在第二个浏览器中执行此操作时,我希望它说usernumber is 2。它实际上是usernumber is 2,但仅当我按下按钮两次或更多时。

在第二个浏览器上按下按钮后,我打开第一个浏览器并按下按钮,现在显示usernumber is 2,当我按两次或更多次时,显示usernumber is 1

所以它根本不稳定,我总是按此按钮以保持正确的值。

如果你运行我的文件,你会看到我的意思更好。我使用谷歌浏览器,我的快递版本是3.0.0,我的socket.io版本是0.9.16。

这是我的app.js和index.html文件:

的index.html

<!DOCTYPE html>
<html>

<head>
<meta charset="utf-8" />
<title> client number </title>

<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script>
var ax;
jQuery(function($) {
  var socket = io.connect();

  socket.emit('getbrowser1', {});
  socket.on('getbrowser1f', function(data) {
    ax = data;
  });

  var butondene1 = document.getElementById("butondene1");
  butondene1.addEventListener('click', function() {
    socket.emit('getbrowser1', {});
    document.getElementById("playerwho").innerHTML = "usernumber is " + ax;
  });
});
</script>
</head>

<body>

<button id="butondene1">butondeneme1</button>
<text  id="playerwho">player who ? </text>
</body>
</html>

App.js

var express = require('express'),
  app = express(),
  server = require('http').createServer(app),
  io = require('socket.io').listen(server);

var usernumm = 0;
var usernum1 = [];

app.use(express.static(__dirname + '/'));

server.listen((process.env.PORT || 5000));

io.sockets.on('connection', function(socket) {
  var endpoint = socket.manager.handshaken[socket.id].address;

  console.log('***New connection from ' + endpoint.address + ':' + endpoint.port);

  usernumm++;
  usernum1[usernumm] = endpoint.port;

  console.log('usernum' + usernumm + 'geldi' + findusernum());

  socket.on('disconnect', function() {
    usernumm--;

    console.log('***Client disconnected');
  });


  socket.on('getbrowser1', function(data) {
    var a = findusernum();
    io.sockets.emit('getbrowser1f', a);
  });

  //finds number of online users

  function findusernum() {
    for (var i = 0; i < 4; i++) {
      if (usernum1[i] == endpoint.port) {
        return i;
      } else {}
    }
  }

});

1 个答案:

答案 0 :(得分:0)

我无法重现您描述的行为,但wp-admin wp-content wp-includes analytics.txt <-- added this file, but cannot seem to access it via a web browser index.php etc... 对于不同的客户端不一定是不同的。您可能希望改为使用endpoint.port

除此之外,您的代码中存在不同的逻辑问题。

当连接发生时,你写道:

uuid

断开连接时,你有:

usernumm++;
usernum1[usernumm] = endpoint.port;

让我们假设您有以下连接顺序:

usernumm--;

除此之外你还有:

UserA connects (usernumm++ => 1)
UserB connects (usernumm++ => 2)

UserA disconnects (usernumm-- => 1)
UserC connects (usernumm++ => 2) << here you overwrite the data of UserB

此处的问题是您在for (var i = 0; i < 4; i++) { if (usernum1[i] == endpoint.port) { return i; } else {} } 开始循环,但0的索引0始终为usernum1,因为您使用增量后的undefined。这不一定是一个问题,但它使代码难以阅读,因为你会认为最多有4个用户,但实际上你只能有3个。

但回到您的问题而不是usernumm,您可以使用递增的数字(取决于您的服务运行的时间),也可以使用未连接的用户未使用的uuid或随机数。