如何停止Socket.io spaming连接?
我正在制作一个socket.io聊天应用程序。当我启动服务器或进行第一次连接时,它会阻止回调。在服务器停止之前,回调不会停止。我认为错误来自html文件,但我不确定。感谢您的时间。 IO回调:
io.sockets.on('connection', (socket) =>{
connections.push('socket')
console.log('Connection made \n ' + connections.length + ' made')
socket.on('disconnect', function(data){
connections.splice(connections.indexOf(socket), 1)
console.log('Disconnected: %s sockets left', connections.length)
})
})
我的HTML文件:
<!DOCTYPE html>
<html>
<head>
<title>Chat App</title>
<link rel="stylesheet" href=".3.6/css/bootstrap.min.css">
<script src=".io/2.2.0/socket.io.js"></script>
<script src=".min.js"></script>
<style>
body{
margin: 30px;
}
</style>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-4">
<div class="well">
<h3>Online Users</h3>
<ul class="list-group" id="users"></ul>
</div>
</div>
<div class="col-md-8">
<div class="chat" id="chat"></div>
<form id="messageForm">
<div class="form-group">
<label>Enter Message</label>
<textarea id="message" class="form-control"></textarea>
<br>
<input type="submit" class="btn btn-primary" value="Send">
</div>
</form>
</div>
</div>
</div>
<script>
var socket = io()
</script>
</body>
</html>
回答如下:
问题在第2行。你正在推动string
,即'socket'
到connections
。 'socket'
没有引用参数中的socket
变量。你需要推动socket
而不是'socket'
,因为它只是字母组合而不是变量
io.sockets.on('connection', (socket) =>{
connections.push(socket) // this line is changed
console.log('Connection made \n ' + connections.length + ' made')
socket.on('disconnect', function(data){
connections.splice(connections.indexOf(socket), 1)
console.log('Disconnected: %s sockets left', connections.length)
})
})