diff --git a/lib/server/swarm.js b/lib/server/swarm.js index 9e3a0a20..21c83b5f 100644 --- a/lib/server/swarm.js +++ b/lib/server/swarm.js @@ -155,6 +155,8 @@ class Swarm { if (!peer) continue if (isWebRTC && peer.peerId === ownPeerId) continue // don't send peer to itself if ((isWebRTC && peer.type !== 'ws') || (!isWebRTC && peer.type === 'ws')) continue // send proper peer type + // 如果端口号不是0-65535, continue + if (peer.port > 65535 || peer.port < 0) continue peers.push(peer) } return peers diff --git a/server.js b/server.js index f7023d99..bd351515 100644 --- a/server.js +++ b/server.js @@ -204,7 +204,7 @@ class Server extends EventEmitter { return html } - if (req.method === 'GET' && (req.url === '/stats' || req.url === '/stats.json')) { + if (req.method === 'GET' && (req.url === '/stats' || req.url === '/stats.json' || req.url === '/torrents.json' || req.url === '/peers.json')) { infoHashes.forEach(infoHash => { const peers = this.torrents[infoHash].peers const keys = peers.keys @@ -275,6 +275,12 @@ class Server extends EventEmitter {

Clients:

${printClients(stats.clients)} `.replace(/^\s+/gm, '')) // trim left + } else if (req.url === '/torrents.json') { + res.setHeader('Content-Type', 'application/json') + res.end(JSON.stringify(this.torrents)) + } else if (req.url === '/peers.json') { + res.setHeader('Content-Type', 'application/json') + res.end(JSON.stringify(allPeers)) } } }) @@ -509,8 +515,8 @@ class Server extends EventEmitter { response.info_hash = hex2bin(params.info_hash) - // WebSocket tracker should have a shorter interval – default: 2 minutes - response.interval = Math.ceil(this.intervalMs / 1000 / 5) + // WebSocket tracker should have a shorter interval – default: 12 seconds + response.interval = Math.ceil(this.intervalMs / 1000 / 100) } // Skip sending update back for 'answer' announce messages – not needed