我有一个Node.Js / Socket.IO服务器应用程序,它需要来自在Android上运行的客户端应用程序的单个连接。 Android客户端经常断开连接,然后重新连接。这导致我的服务器有多个挂起连接和socket.io线程循环。我想从我的Node.js服务器处理这个问题,并在客户端重新连接时关闭所有挂起的连接。 所以我的问题是: 如何识别连接的来源? 如何检测到从服务器到此客户端仍然存在打开的连接? 如何关闭它们,以便只有一个活动套接字.Io?
答案 0 :(得分:0)
这里是一个示例,显示了您要查找的内容的不同方面:
文件:server.js
//--- SERVE A DEMO CLIENT ---
const app = require('http').createServer(serveClient)
const fs = require('fs')
function serveClient(req,res){
fs.readFile(__dirname+'/index.html',(err,data)=>{
res.writeHead(200);
res.end(data);
})
}
//--- SOCKET.IO LOGIC ---
const io = require('socket.io').listen(app)
var uniqueID = false //keep track of the unique client ID
io.sockets.on('connection',(socket)=>{
//:Check if we have already a unique client connected
if(uniqueID!=socket.id){
console.log("[+] New Connection :",socket.id)
if(uniqueID){
console.log("[~] Disconnecting Old Client :",uniqueID)
io.sockets.connected[uniqueID].disconnect()
}
uniqueID = socket.id
}
//:Detect Client Disconnections
socket.on('disconnect',()=>{
console.log('[-] Disconnected :',socket.id)
if(socket.id==uniqueID){uniqueID=false}
})
//:Output current list of connected client IDs
console.log(Object.keys(io.sockets.connected))
})
app.listen(1337)
文件:index.html
<html><head>
<script src="/socket.io/socket.io.js"></script>
<script>var socket = io.connect()</script>
</head></html>