Sprístupnite lokálny server cez tunel pomocou PROXYSERVER() a PROXYCLIENT()
PROXY() presmeruje požiadavku na server, ku ktorému sa proxy dostane. Tunel je pre opačný prípad: program je na notebooku alebo za firewallom, takže sa k nemu nikto nepripojí, ale on sa môže pripojiť von. PROXYSERVER() a PROXYCLIENT() to dosiahnu jedným WebSocketom, ktorý otvorí súkromná strana:
PROXYSERVER([endpoint], [socketendpoint], [logger])beží na verejnom serveri. Každá požiadavka podendpoint(predvolene/) sa pošle cez tunel;socketendpoint(predvolene/) je adresa WebSocketu, kde sa pripája klient. Použite rôzne adresy, keď tá istá aplikácia obsluhuje aj niečo iné: proxy na/zoberie každú požiadavku, aj tie vašich vlastných rout (beží pred nimi).loggerje funkcia (predvolene: vypisuje s dátumom); odovzdajtenull, ak žiadny nechcete.PROXYCLIENT(serverurl, port, [logger])beží na súkromnej strane (v tomto príklade sa adresa servera zostaví zCONF.$port, portu aplikácie).serverurlje adresa WebSocketu servera (ws://alebowss://;httpsa zmení naws) aportje3000aleboip:3000, lokálny program, ktorý prijíma požiadavky. Vráti klienta WebSocketu.- Jeden klient naraz: keď sa pripojí druhý klient, server ho zatvorí s kódom
4001. Bez klienta je odpoveďou serveraNot yet available.. - Lokálny program dostane celú cestu pôvodnej požiadavky vrátane
endpoint(/tunnel/hello), hlavičky návštevníka a hlavičkux-proxy: Total.js, pričomhostje nastavený na lokálnu adresu. - Route WebSocketu nemá vlastnú autentifikáciu: nezverejňujte ju bez niečoho pred ňou, čo rozhoduje, kto sa môže pripojiť (adresa je tajomstvo, vlastný
check, firewall).
Tu je jedna aplikácia oboma stranami: malý lokálny program na porte 9511 (stačil by akýkoľvek program), server na /tunnel/ a klient, ktorý sa pripája k tej istej aplikácii.
// The program that is "private": an ordinary HTTP server that only listens on the loopback address
require('http').createServer(function(req, res) {
res.writeHead(200, { 'content-type': 'application/json' });
res.end(JSON.stringify({ path: req.url, via: req.headers['x-proxy'] || null, host: req.headers.host }));
}).listen(9511, '127.0.0.1');exports.install = function() {
ROUTE('GET /status/', status);
ROUTE('POST /connect/', connect);
};
// The public side: /tunnel/* goes through the tunnel, the WebSocket of the client is /tunnel-socket/. No logger.
PROXYSERVER('/tunnel/', '/tunnel-socket/', null);
let client = null;
function connect($) {
client = PROXYCLIENT('ws://127.0.0.1:' + CONF.$port + '/tunnel-socket/', '9511', null);
$.json({ connecting: true });
}
function status($) {
$.json({ connected: !!client });
}