Node.js socket.io处理Socket.IO从Same Client重新连接

时间:2014-03-26 19:23:39

标签: node.js socket.io

我有一个Node.Js / Socket.IO服务器应用程序,它需要来自在Android上运行的客户端应用程序的单个连接。 Android客户端经常断开连接,然后重新连接。这导致我的服务器有多个挂起连接和socket.io线程循环。我想从我的Node.js服务器处理这个问题,并在客户端重新连接时关闭所有挂起的连接。 所以我的问题是: 如何识别连接的来源? 如何检测到从服务器到此客户端仍然存在打开的连接? 如何关闭它们,以便只有一个活动套接字.Io?

1 个答案:

答案 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>