恰当的中间人进程
网络请求获取文件,需要对请求进行复杂处理,得到文件请求,同时不同的协议数据不同,非常复杂,而我们只是想处理获取文件的请求,可以使用中间人进程插入到中间,它只负责把网络请求装换成文件请求,极大简化了设计
web_server(Client) ->
receive
{Client, {get, Page}} ->
case file:read(Page) of
{ok, Bin} -> Client ! {self(), {data, Bin}};
{error, _} -> Client ! {self(), error}
end,
web_server(Client)
end.
消息统一化来解决多种问题
-module(multi_server).
-export([start/0]).
start() ->
spawn(fun() -> multi_server() end).
multi_server() ->
receive
{_Pid, {email, _From, _Subject, _Text} = Email} ->
{ok, S} = file:open("mbox", [write, append]),
io:format(S, "~p.~n", [Email]),
file:close(S);
{_Pid, {im, From, Text}} ->
io:format("Msg(~s):~s~n", [From, Text]);
{Pid, {get, File}} ->
Pid ! {self(), file:read_file(File)};
Any ->
io:format("multi server got:~p~n", [Any])
end,
multi_server().
不需要那么多各不相同的客户端口服务器请求和响应编码,
有一种通用的格式就足够了。一切消息都使用Erlang数据类型
term_to_binary(Term)和逆函数binary_to_term(Bin)对所有请求消息和返回消息进行加密压缩和解压,让所有通信变成同一种数据格式