То что вы упомянули Рыбоглаз дает мне право судить о том, что вы никогда не пеерепаковывали OSGi бандлы и никогда не сравнивали стоимость запуска всего OSGi контейнера с например запуском Erlang/OTP приложений. Наша с вами разница также заключается в том, что вы никогда не обслуживали JVM и не сталкивались с проблемами сборщиков мусоров СMS, G1. Эрланг это отнюдь не о SLA. Эрланг -- это об прототипировании, Time-to-market, более управляемом коде и удельной стоимости оборудования на единицу пользователя.
Проверить, что этот сервер работающий можно с помощью любого почтового клиента: Windows Mail, Apple Mail или Сlaws Mail. И пример страницы с комет чатом на три строчки:
Вот вы якобы знаете, что такое LDAP а задача для вас кажется неподъемной за пол часа, потому что вы привыкли тратить время зря в ентерпрайзе. И свое и заказчика. И даже объяснения у вас равесистые, вместого того что бы просто показать код.
Re: Тролинг детектед
Date: 2013-06-20 05:05 am (UTC)Вот вам на последок LDAP сервер на Erlang:
erlc LDAP.asn1
-module(dir). -compile(export_all). -include("LDAP.hrl"). listen(Port) -> {ok, LSocket} = gen_tcp:listen(Port, [binary, {packet, 0}, {active, false}, {reuseaddr, true}]), spawn(eds,accept,[LSocket]). accept(LSocket) -> {ok, Socket} = gen_tcp:accept(LSocket), spawn(fun() -> loop(Socket) end), accept(LSocket). loop(Socket) -> case gen_tcp:recv(Socket, 0) of {ok, Data} -> Decoded = asn1rt:decode('LDAP','LDAPMessage',Data), io:format("Decoded: ~p~n",[Decoded]), case Decoded of {ok,{'LDAPMessage',No,Message,Asn}} -> message(No,Message,Socket); _Else -> noLDAP end, loop(Socket); E -> io:format("Error: ~p~n",[E]), ok end. message(No,Message,Socket) -> case Message of {bindRequest, {'BindRequest',Type,Uid,Auth}} -> bind(No,Uid,Auth,Socket); {searchRequest, {'SearchRequest',SearchDN,Scope,Deref,SizeLimit, TimeLimit,TypesOnly,Filter,Attributes}} -> search(No, SearchDN, Scope,Deref,SizeLimit, TimeLimit,TypesOnly, Filter,Attributes,Socket); _Else -> io:format("Unknown: ~p~n",[Message]) end. bind(No,Uid2,Auth,Socket) -> Response = #'BindResponse'{resultCode = success, matchedDN = Uid, diagnosticMessage = "OK"}, answer(Response,No,bindResponse,Socket). answer(Response,No,ProtocolOp,Socket) -> Message = #'LDAPMessage'{messageID = No, protocolOp = {ProtocolOp, Response}}, {ok, Bytes} = asn1rt:encode('LDAP', 'LDAPMessage', Message), io:format("~p~n", [Message]), gen_tcp:send(Socket, list_to_binary(Bytes)). search(No,SearchDN,Scope,Deref,SizeLimit,TimeLimit,TypesOnly,Filter,Attributes,Socket) -> [ begin CN = {'PartialAttribute', "cn", [CommonName]}, MAIL = {'PartialAttribute', "mail", [Mail]}, Response = {'SearchResultEntry', CommonName, [CN,MAIL]}, answer(Response,No,searchResEntry,Socket) end || {CommonName,Mail} <- [{"maxim","maxim@synrc.com"},{"joe","joe@ericsson.com"}]], Done = #'LDAPResult'{resultCode = success, matchedDN = SearchDN, diagnosticMessage = "OK"}, answer(Done,No,searchResDone,Socket).Проверить, что этот сервер работающий можно с помощью любого почтового клиента: Windows Mail, Apple Mail или Сlaws Mail. И пример страницы с комет чатом на три строчки:
body() -> wf:comet_global(fun() -> loop() end,chat), [ #panel{id=history}, #textbox{id=message}, #button{postback=chat}]. event(chat) -> wf:send_global(chat, wf:q(message)), loop() -> receive Message -> wf:insert_bottom(history, #span{text=Message}), wf:flush() end, loop().Вот вы якобы знаете, что такое LDAP а задача для вас кажется неподъемной за пол часа, потому что вы привыкли тратить время зря в ентерпрайзе. И свое и заказчика. И даже объяснения у вас равесистые, вместого того что бы просто показать код.