-
用erlang试着做了个反向代理,但感觉转发效率好低,不知道为什么15
下面是核心代码,原始的结构是一个listener的sup,一个client的sup,一旦有接入,就起一个worker,worker是用gen_fsm做的。开始以为这是由于结构不好,就把核心代码取出来写了个简单的程序,但结果一样。
我用ab -n 100 -c 10在虚拟机(vmware player 4,ubuntu 10.04 server,分配了4核,384G内存)做的测试,服务是nginx的一个静态页,直接访问是20000多rps,通过这个代理只有2000多。虚拟机和实体机差不多,虚拟机用单核测试分别是10000多和1000多,关掉smp对结果没什么影响。试过-K启动erl,也试过加上no_delay、delay_send这些参数。
另外我还试过用nodejs写了一个,和这个简单的代码几乎一样,但是效率非常高,几乎和不用代理一样。
-module(prx). -export([start/0]). start() -> case gen_tcp:listen(8080, [binary, {packet, 0}, {active, true}]) of {ok, ListenSocket} -> accept(ListenSocket); _ -> true end. accept(ListenSocket) -> {ok, ClientSocket} = gen_tcp:accept(ListenSocket), spawn(fun() -> accept(ListenSocket) end), case gen_tcp:connect("localhost", 80, [binary, {packet, 0}, {active, true}]) of {ok, ServerSocket} -> loop(ClientSocket, ServerSocket); _ -> io:format("??~n"), true end. loop(ClientSocket, ServerSocket) -> receive {tcp, ClientSocket, Bin} -> gen_tcp:send(ServerSocket, Bin), loop(ClientSocket, ServerSocket); {tcp, ServerSocket, Bin} -> gen_tcp:send(ClientSocket, Bin), loop(ClientSocket, ServerSocket); {tcp_closed, _} -> gen_tcp:close(ClientSocket), gen_tcp:close(ServerSocket); {tcp_error, _} -> gen_tcp:close(ClientSocket), gen_tcp:close(ServerSocket); _O -> io:foramt("others: ~p~n", [_O]) end.
2011年12月08日 18:59
目前还没有答案
相关推荐
使用erlang进行UDP测试,这几个是为了凑够20字。
erlang入门电子书 erlang编程 Introducing Erlang,作者Simon.St.Laurent
Erlang并发编程,Erlang程序设计,Erlang中文手册。 学习erlang的好资料。 Erlang是一个结构化,... 使用Erlang来编写分布式应用要简单的多,因为它的分布式机制是透明的:对于程序来说并不知道自己是在分布式运行。
erlang 安装包
ErlangB和ErlangC计算工具(exe可执行文件+excel两个) ErlangB和ErlangC计算工具(exe可执行文件+excel两个)
Erlang及其应用Erlang及其应用Erlang及其应用
在本文中,我们将介绍如何使用Erlang开发一个简单的游戏服务器,并讨论其优点和实现细节。 Why Erlang? Erlang是一种轻量级的语言,非常适合开发高性能的服务器应用程序。其主要优点有: * 轻量级process:...
erlang
● 分布式 - 一个分布式Erlang系统是多个Erlang节点组成的网络(通常每个处理器被作为一个节点) ● 健壮性 - Erlang具有多种基本的错误检测能力,它们能够用于构建容错系统。 ● 软实时性- Erlang支持可编程的“软...
erlang25.0 windows版本
erlang otp25 win安装包
"Erlang中文基础教程" Erlang 编程语言是一种功能强大且灵活的编程语言,它提供了一个交互式的 shell 环境,允许用户在其中编写和运行代码。 Erlang Shell 是一个命令行交互环境,类似于 UNIX 和 LINUX 系统的...
erlang 中文基础教程erlang 中文基础教程
erlang22最新下载包 erlang22.1.tar.gz erlang22最新下载包 erlang22最新下载包
poolboy erlang 线程池 一个用erlang写的pool库
《Erlang之父:为什么面向对象很糟糕》PDF 《Erlang之父:为什么面向对象很糟糕》PDF 《Erlang之父:为什么面向对象很糟糕》PDF 《Erlang之父:为什么面向对象很糟糕》PDF 《Erlang之父:为什么面向对象很糟糕》PDF
erlang安装包
编译的ERLANG使用MYSQL的beam文件~~也包括源文件
Erlang和RabbitMQ安装包
本书不适用于初学者。从大多数教程、书籍以及培训课程上所学到的知识,还...本书不要求读者知道如何调试Erlang软件,如何理解已有的代码库,如何诊断问题,以及知 道一些如何在生产环境中部署Erlang的最佳实践F 18 F。