Implementar shadowsocks con Heroku gratis
Explicación
"Versión": "1.0.0"
fuente de Github
inglés
No hay menos implementaciones de Shadowsocks: local y servidor
Pero esta vez, vi la caza desgarradora, parece estar muy bellamente escrita
servidor.js
Local.js
Protocolo Código principal-TCPRELAY
otro
servidor.js
Código 1-6
const TCPRelay = require ( './tcprelay' ) . TCPRelay ;
// 协议主内容,后续
const server = require ( 'commander' ) ; // 命令解析
const constants = require ( './constants' ) ; // 版本
const throng = require ( 'throng' ) ;
// 集群化Node.js应用程序的简单工作管理器
const log4js = require ( 'log4js' ) ; // 日志记录
// log4js 包含 node 与 browser, 而这个
// 去掉了浏览器部分,只专注-node
const logger = log4js . getLogger ( 'server' ) ;
// 新建-server-示例 const VERSION = '0.1.8' ;
module . exports . VERSION = VERSION ;Código 8-16
server
. version ( constants . VERSION )
. option ( '-m --method <method>' , 'encryption method, default: aes-256-cfb' )
. option ( '-k --password <password>' , 'password' )
. option ( '-s --server-address <address>' , 'server address' )
. option ( '-p --server-port <port>' , 'server port, default: 8388' )
. option ( '--log-level <level>' , 'log level(debug|info|warn|error|fatal)' , / ^(debug|info|warn|error|fatal)$ / i , 'info' )
. option ( '--log-file <file>' , 'log file' )
. parse ( process . argv ) ; Opciones de configuración -Commander> pondrá --server-address -> server.serverAddress
method > Método de cifrado de contraseña
password > Contraseña
serverPort > Puerto de servidor "Transferencia de puerto de Heroku-> 80"
serverAddress > URL del servidor "xxx.herokuapp.com"
logLevel > Nivel de registro
logFile > archivo de registro
throng puede operar múltiples procesos
Código 18-22
throng ( {
workers : process . env . WEB_CONCURRENCY || 1 ,
master : startMaster ,
start : startWorker
} ) ; workers > Número de procesos
startMaster > Proceso principal
function startMaster ( ) {
logger . info ( 'started master' ) ;
}startWorker > procesos infantiles function startWorker ( id ) {
logger . info ( `started worker ${ id } ` ) ;
var relay = new TCPRelay ( {
serverAddress : process . env [ 'SERVER_ADDRESS' ] || server . serverAddress || '127.0.0.1' ,
serverPort : process . env [ 'PORT' ] || server . serverPort || 8388 ,
password : process . env [ 'PASSWORD' ] || server . password || 'shadowsocks-over-websocket' ,
method : process . env [ 'METHOD' ] || server . method || 'aes-256-cfb'
} , false ) ;
relay . setLogLevel ( server . logLevel ) ;
relay . setLogFile ( server . logFile ) ;
relay . setServerName ( 'server-' + id ) ;
relay . bootstrap ( ) ;
}TCPRelay > socks-protocol Local.js
Código 1-15
const TCPRelay = require ( './tcprelay' ) . TCPRelay ;
const local = require ( 'commander' ) ; // 命令解析
const constants = require ( './constants' ) ; // 版本
local
. version ( constants . VERSION )
. option ( '-m --method <method>' , 'encryption method, default: aes-256-cfb' )
. option ( '-k --password <password>' , 'password' )
. option ( '-s --server-address <address>' , 'server address' )
. option ( '-p --server-port <port>' , 'server port, default: 8388' )
. option ( '-b --local-address <address>' , 'local binding address, default: 127.0.0.1' )
. option ( '-l --local-port <port>' , 'local port, default: 1080' )
. option ( '--log-level <level>' , 'log level(debug|info|warn|error|fatal)' , / ^(debug|info|warn|error|fatal)$ / i , 'info' )
. option ( '--log-file <file>' , 'log file' )
. parse ( process . argv ) ; method > Método de cifrado de contraseña
password > Contraseña
serverPort > Puerto de servidor "Transferencia de puerto de Heroku-> 80"
serverAddress > URL del servidor "xxx.herokuapp.com"
logLevel > Nivel de registro
logFile > archivo de registro
localAddress > URL local - 127.0.0.1
localPort > puerto local
Código 17-27
var relay = new TCPRelay ( {
localAddress : local . localAddress || '127.0.0.1' ,
localPort : local . localPort || 1080 ,
serverAddress : local . serverAddress || '127.0.0.1' ,
serverPort : local . serverPort || 8388 ,
password : local . password || 'shadowsocks-over-websocket' ,
method : local . method || 'aes-256-cfb'
} , true ) ;
relay . setLogLevel ( local . logLevel ) ;
relay . setLogFile ( local . logFile ) ;
relay . bootstrap ( ) ;TCPRelay > socks-protocol Inicio multiproceso multiproceso
registro de log4js