¿Cómo crear un servidor tracker de torrents por websocket?

  • Autor Autor Wizatek
  • Fecha de inicio Fecha de inicio
W

Wizatek

Gamma
Verificación en dos pasos activada
¡Ha verificado su Paypal!
Verificado por Binance
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola chicos.

La verdad es que ya no se ni donde colocarlo ya que en ningun lado saben de lo hablo.

Estoy intentando crear un servidor tracker de torrents por websocket y hay una libreria en nodejs muy buena que es https://github.com/webtorrent/bittorrent-tracker la cuestion es que tal vez este haciendo algo mal ya que ami no me funciona.

Este tracker usa exactamente lo mismo: https://tracker.files.fm:7073/stats, puedo conectarme y todo, pero el mio queda tal que asi:

1701290551907.webp


Y no responde al websocket.

Funcional:

1701290631851.webp


El mio:

1701290586665.webp


El codigo que ejecuto es este:

Insertar CODE, HTML o PHP:
import { Server } from 'bittorrent-tracker'

const server = new Server({
  udp: true, // enable udp server? [default=true]
  http: true, // enable http server? [default=true]
  ws: true, // enable websocket server? [default=true]
  stats: true, // enable web-based statistics? [default=true]
  trustProxy: false // enable trusting x-forwarded-for header for remote IP [default=false]
})

// Internal http, udp, and websocket servers exposed as public properties.
server.http
server.udp
server.ws

server.on('error', function (err) {
  // fatal server error!
  console.log(err.message)
})

server.on('warning', function (err) {
  // client sent bad data. probably not a problem, just a buggy client.
  console.log(err.message)
})

server.on('listening', function () {
  // fired when all requested servers are listening

  // HTTP
  const httpAddr = server.http.address()
  const httpHost = httpAddr.address !== '::' ? httpAddr.address : 'localhost'
  const httpPort = httpAddr.port
  console.log(`HTTP tracker: http://${httpHost}:${httpPort}/announce`)

  // UDP
  const udpAddr = server.udp.address()
  const udpHost = udpAddr.address
  const udpPort = udpAddr.port
  console.log(`UDP tracker: udp://${udpHost}:${udpPort}`)

  // WS
  const wsAddr = server.ws.address()
  const wsHost = wsAddr.address !== '::' ? wsAddr.address : 'localhost'
  const wsPort = wsAddr.port
  console.log(`WebSocket tracker: ws://${wsHost}:${wsPort}`)

})


// start tracker server listening! Use 0 to listen on a random free port.
const port = 80
const hostname = "localhost"
server.listen(port, hostname, () => {
  // Do something on listening...
})

// listen for individual tracker messages from peers:

server.on('start', function (addr) {
  console.log('got start message from ' + addr)
})

server.on('complete', function (addr) {})
server.on('update', function (addr) {})
server.on('stop', function (addr) {})

// get info hashes for all torrents in the tracker server
Object.keys(server.torrents)

Alguien sabe algo?
 
Yo he usado dicho script en unos cuantos proyectos, de hecho hice en su momento un PR a ese proyecto para añadirle la opción de usar WSS para poder usarlo en sitios con https (luego hicieron mal el un merge y se perdieron mis cambios xD).

PD: Por experiencia te digo que la librerías no es muy buena, no por la calidad del código (aunque no te fíes si hacen mal los merges xD), sino por algo usual en javascript: En cuanto le vas poniendo más peers el consumo aumenta en función exponencial.

kj
 
Yo he usado dicho script en unos cuantos proyectos, de hecho hice en su momento un PR a ese proyecto para añadirle la opción de usar WSS para poder usarlo en sitios con https (luego hicieron mal el un merge y se perdieron mis cambios xD).

PD: Por experiencia te digo que la librerías no es muy buena, no por la calidad del código (aunque no te fíes si hacen mal los merges xD), sino por algo usual en javascript: En cuanto le vas poniendo más peers el consumo aumenta en función exponencial.

kj
¿Y cómo pudiste integrar el servidor y el cliente para que ambos funcionen sin que se canibalicen?

Es decir, el server.js funciona muy bien, solo que no tendrás los peers de los demás torrents ya que no usaron tu tracker para subir el video. Por lo tanto, necesitas el cliente.js para extraer la información de otros trackers.

¿Qué hiciste en ese caso?
 
¿Y cómo pudiste integrar el servidor y el cliente para que ambos funcionen sin que se canibalicen?

Es decir, el server.js funciona muy bien, solo que no tendrás los peers de los demás torrents ya que no usaron tu tracker para subir el video. Por lo tanto, necesitas el cliente.js para extraer la información de otros trackers.

¿Qué hiciste en ese caso?

de que sirve eso de Tracker? no se mucho del tema

yo tengo es un nodo que esta conectado a muchas paginas web de descarga por torrent y puedo buscar peliculas, juegos apk entre muchas otras cosas.
 
de que sirve eso de Tracker? no se mucho del tema

yo tengo es un nodo que esta conectado a muchas paginas web de descarga por torrent y puedo buscar peliculas, juegos apk entre muchas otras cosas.
Como su nombre indica, un rastreador, rastrea a usuarios (peers) que tienen fragmentos de un archivo específico y al conectarnos a ellos podemos descargarlos y juntar las partes.

Lo que yo estoy haciendo es un stream de videos torrent, de hecho ya lo tengo hecho para desktop y app, lo mismo que Popcorn time, pero yo lo quiero para web y sin consumir ancho de banda para mi servidor.
 
Como su nombre indica, un rastreador, rastrea a usuarios (peers) que tienen fragmentos de un archivo específico y al conectarnos a ellos podemos descargarlos y juntar las partes.

Lo que yo estoy haciendo es un stream de videos torrent, de hecho ya lo tengo hecho para desktop y app, lo mismo que Popcorn time, pero yo lo quiero para web y sin consumir ancho de banda para mi servidor.

oh no sabia eso, yo se mucho Nodejs.

🤔 en resumen por ejemplo, uno indica el archivo que es, y rastreara los usuario que tienen copia del archivo y asi hacer un video stream de ese torrent?
 
oh no sabia eso, yo se mucho Nodejs.

🤔 en resumen por ejemplo, uno indica el archivo que es, y rastreara los usuario que tienen copia del archivo y asi hacer un video stream de ese torrent?
Si, mas o menos 😀
 
Atrás
Arriba