代理服务器

    它既能做tcp代理,也能作http代理。内置负载均衡算法为轮询法。

    来看一个http反向代理的例子:

    上例以多进程方式运行一个http反向代理服务器,服务器本身监听9090端口,代理两个后端服务器,后端服务器端口分别是8888和8889。如果访问后端需要安全连接,可通过的第三个参数(bool值)进行配置,默认是false即无需使用安全连接。

    两个后端服务器都是输出helloworld的nodejs程序,代码很简单:

    同样的后端,同样多的工作进程,如果比较于nginx的proxy_pass方案,无论是否开启缓存,mongols的并发性能都要强于nginx:

    实际上,从 web server 到 reverse proxy,对比于mongols,nginx其实是一款很慢的服务器软件。

    仅对http代理有效。

    tcp_proxy_server通过lru算法+过期时间的策略实现加速。因为缓存在内存中,非常快。只有当请求方法、URI和参数都相同的请求,才会对应到同一个缓存内容。

    tcp_proxy_server可配置连接级的安全防护,通过run方法的参数。该参数是一个需要返回布尔值的functional,返回false则意味着直接关闭连接。

    该functional以类client_t为参数。开发者可从该参数获取连接的系统唯一标识符sid,连接建立时间,该连接已经发送数据的次数count,该连接的ip,以及服务器保持在线的连接总数u_size。有了这些量,开发者很轻易即可写出负责安全防护的functional,比如上例中的f可重写如下:

    如果开启http代理模式,还可以配置请求过滤的functional。例如上例中的h,可根据HTTP请求头信息实现自定义过滤。

    关闭连接时,对tcp代理返回close字符串,对http代理返回403错误。开发者可通过set_default_content方法设置默认返回值。

    例子:

    set_enable_tcp_send_to_other决定消息是否转发其他在线客户端。