【发布时间】:2010-12-22 19:41:48
【问题描述】:
我需要编写一个服务器来接收来自其他模块的指令并根据收到的指令采取行动。效率是我主要关心的问题。我是使用gen_server 还是编写自己的服务器。 “我自己的服务器”是指:
-module(myserver).
-export([start/0, loop/0]).
start() ->
spawn(myserver, loop, []).
loop() ->
receive
{From, Msg} -> %Do some action here... ;
message2 -> %Do some action here...;
message3 -> %Do some action here...;
message4 -> %Do some action here...;
.
.
.
_-> ok
end,
loop().
所以要使用myserver,我可能会在启动时将进程注册到一个注册名下,然后每个客户端都会使用这个pid向服务器发送消息。
那么我应该使用这种方法,还是使用gen_server 行为来实现服务器?使用gen_server 有什么好处吗?但是与myserver 相比,使用gen_server 会增加任何开销吗?
【问题讨论】:
-
前几个问题你一直很关心效率。你有什么性能要求的数字吗?
-
哦,一定要使用 gen_server,直到你能测量出你的瓶颈在哪里。
-
我现在没有任何数字来量化系统的性能要求。这是一个实验性系统,所以我现在只知道服务器必须处理难以置信的流量。所以我试图更加注重效率并尽可能优化。
-
@Christian,哦,如果您有兴趣,会在系统准备好黄金时段时通知您:)
-
@ErJab:只需在您的个人资料中发布您宣布该服务的博客条目的 URL。
标签: erlang gen-server