Re: Тролинг детектед

Date: 2013-06-20 05:05 am (UTC)
То что вы упомянули Рыбоглаз дает мне право судить о том, что вы никогда не пеерепаковывали OSGi бандлы и никогда не сравнивали стоимость запуска всего OSGi контейнера с например запуском Erlang/OTP приложений. Наша с вами разница также заключается в том, что вы никогда не обслуживали JVM и не сталкивались с проблемами сборщиков мусоров СMS, G1. Эрланг это отнюдь не о SLA. Эрланг -- это об прототипировании, Time-to-market, более управляемом коде и удельной стоимости оборудования на единицу пользователя.

Вот вам на последок 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 а задача для вас кажется неподъемной за пол часа, потому что вы привыкли тратить время зря в ентерпрайзе. И свое и заказчика. И даже объяснения у вас равесистые, вместого того что бы просто показать код.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

juan_gandhi: (Default)
Juan-Carlos Gandhi

June 2025

S M T W T F S
1 2345 6 7
8 9 10 11 121314
15161718 1920 21
22232425262728
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 24th, 2025 08:35 pm
Powered by Dreamwidth Studios