/shadowsocks-over-websocket-explain

explain : shadowsocks-js 实现 heroku 部署 use Server:ws Local:net

Primary LanguageJavaScriptGNU General Public License v3.0GPL-3.0

shadowsocks-over-websocket

免费使用 Heroku 部署 shadowsocks

explain

Explanation

"version": "1.0.0"

github source

english


shadowsocks 的实现不再少数-分 本地服务器

不过这次,见猎心喜-似乎写得很漂亮


目录


服务器-server

server.js

require-导入

代码 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-示例
  • constants
const VERSION = '0.1.8';

module.exports.VERSION = VERSION;

commander-命令解析

代码 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

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();
}


本地-local

local.js

require-commander

代码 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 > 本地端口


socks-协议

代码 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();

其他