我想给每个客户提供不同的号码。当我点击第一个浏览器上的按钮时,它必须说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文件:
<!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>
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 {}
}
}
});
答案 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或随机数。