Ale*_*des 7 sockets erlang asynchronous network-programming gen-tcp
我正在尝试学习Erlang来做一些简单但可扩展的网络编程.我基本上想要编写一个程序来完成互联网主干上的服务器 - 但规模较小.我想尝试建立一个内部网,其中包含可访问Web的服务器,这些服务器将充当内部网[sic]的网关,并将数据路由到连接的客户端和/或其他网关.
高流量来自这样一个事实:数据不仅会从客户端流向网关而是流向客户端,而是可能需要在几个网关周围反弹才能到达目的地(就像数据在互联网上传播一样).这意味着网关不仅要处理来自客户端的流量,还要处理来自其他网关客户端的流量.
我认为这会导致异常高的流量,即使对于中等数量的客户端和网关也是如此.
来自Python的背景,以及其他脚本语言的较小程度,我习惯于挖掘自定义模块来解决我的问题.我知道Erlang是专为高流量网络编程而设计的,但我能找到的所有这些东西的库/模块都是gen_tcp.
这是否意味着Erlang已经针对这种事情进行了优化,您可以使用其最基本的模块来启动它并期望它可以很好地扩展?
I G*_*ERS 15
gen_tcp即使在大负载的情况下,您也可以获得极佳的性能.如果你只是要传递数据而不是处理它太多,那么我的猜测是你能够很好地扩展 - 实际上你只会传递指针.
用Erlang编写的所有已知可扩展解决方案都使用gen_tcp:
等等.使用它时,有一个值得一提的提示:确保你运行erl,erl +K true这样你就可以访问内核轮询.也就是说,epoll()在Linux,kqueue()/kevent()BSD和/dev/pollSolaris上.另请注意,您可以向TCP端口发出命令,以便根据缓冲区大小等设置其选项.最后,对于某些类型的数据包,您可以让C层为您解析数据包,查看erl -man inet和setopts/2调用.一个例子{packet, 4}是非常受欢迎的.
一般来说,Erlang有一个非常快的I/O子层.即使对于大型复杂的交互,您也可以期望它的执行速度非常快.
| 归档时间: |
|
| 查看次数: |
1198 次 |
| 最近记录: |