shadowsocks over websocket explain
1.0.0
免費使用Heroku部署shadowsocks
Explanation
"version": "1.0.0"
github source
english
shadowsocks 的實現不再少數-分本地和服務器
不過這次,見獵心喜-似乎寫得很漂亮
server.js
local.js
協議主代碼-tcprelay
其他
server.js
代碼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 ;代碼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 ) ;配置選項-commander > 會把--server-address --> server.serverAddress
method > 密碼加密方式
password > 密碼
serverPort > 服務器端口「 heroku 的端口轉移-> 80 」
serverAddress > 服務器網址「 xxx.herokuapp.com 」
logLevel > 日誌等級
logFile > 日誌文件
throng可以多進程運作
代碼18-22
throng ( {
workers : process . env . WEB_CONCURRENCY || 1 ,
master : startMaster ,
start : startWorker
} ) ; workers > 進程數量
startMaster > 主進程
function startMaster ( ) {
logger . info ( 'started master' ) ;
}startWorker > 子進程 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-協議local.js
代碼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 > 密碼加密方式
password > 密碼
serverPort > 服務器端口「 heroku 的端口轉移-> 80 」
serverAddress > 服務器網址「 xxx.herokuapp.com 」
logLevel > 日誌等級
logFile > 日誌文件
localAddress > 本地網址- 127.0.0.1
localPort > 本地端口
代碼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-協議throng 多進程開啟
log4js 日誌記錄