LINUX.ORG.RU

простой сервер на лиспе


0

2

Здравствуйте!
Имеется лисп и клиенты (на самом деле на Дельфи, но будем считать, что они будут на питоне или чем-нибудь ещё). Задача - сделать систему клиент/сервер:
- обмен между клиентом и сервером - по tcp/ip (сокеты?)
- ведение списка пользователей
- авторизация с паролем
- возможность шифрования
- каждый клиентский процесс - это отдельный thread на сервере в рамках единого образа лиспа
- общение происходит синхронно. Инициатива в общении принадлежит клиенту. С точки зрения приложения, клиент отправляет запрос (несколько строк, затем признак завершения запроса, либо sexp) и ждёт строки результата (несколько строк, затем признак завершения, либо sexp, либо что-то ещё с однозначным признаком завершения).
- определение того, что клиент ещё не умер, если умер - вызов ф-ии на стороне лиспа для корректного закрытия соединения
- таймаут на клиенте.
- клиент должен иметь возможность корректно отработать обрыв связи.
Производительность не имеет большого значения.

Прошу совета, в какую сторону копать, а ещё лучше - где взять образец кода для раздраконивания/перепиливания. Например, годится ли telnet и есть ли у него вменяемая реализация на лиспе? slime, видимо, не годится, т.к. отсутствует авторизация, а клиент - только лисповый. Можно было бы сделать через веб-сервер, но он асинхронный да и вообще это извращение.

★★★★★

блин, вот ведь косноязычие - это уже навсегда :-) Уточнения: 1. Сервер пишется на лиспе. 2. Каждому СОЕДИНЕНИЮ соответствует тред на сервере в рамках единого образа лиспа. А клиентский процесс находится, понятное дело, на клиенте и запрашивает это соединение через tcp/ip.

den73 ★★★★★ ()

Имеется лисп и клиенты (на самом деле на Дельфи, но будем считать, что они будут на питоне или чем-нибудь ещё)

Это шедевр абсурда.

Lynyrd ()
Ответ на: комментарий от den73

> Каждому СОЕДИНЕНИЮ соответствует тред на сервере в рамках
> единого образа лиспа

Лучше так не делать.

> где взять образец кода для раздраконивания/перепиливания.

Ну, у меня есть mongo-cl-driver - там присутствует полная реализация протокола взаимодействия с MongoDB, может подойдёт.

archimag ★★★ ()
Ответ на: комментарий от den73

Лучше так не делать.

Почему?

Потому что не масштабируется, а наличие состояния затрудняет разработку. Моё ИМХО, что в большинстве случаев сейчас лучше основываться на HTTP.

archimag ★★★ ()
Ответ на: комментарий от archimag

Посмотрел, тут, скорее, надо выбросить 90%, а потом ещё 75% дописать, например, не нашёл аутентификации. Кроме того, это клиент, а нужен, в основном, сервер. Но спасибо за совет всё равно.

den73 ★★★★★ ()
Ответ на: комментарий от archimag

Потому что не масштабируется, а наличие состояния затрудняет разработку

У меня будет не больше 50 коннектов, а состояние мне как раз нужно. Про http подумаю.

den73 ★★★★★ ()

Если по треду на соединние то Hunchentoot. И на нем или сразу web-сервисы, без них ИМХО плохо если клиент пишешь не ты, хотя бы в качестве запасного варианта. Или если свой протокол то доопределить свих классов для обработки соединения. В API там по-моему все наглядно описано. Другой вопрос что необходимость состояние и треды не одно и тоже, но это более сложный вопрос и с готовыми решениями все не так просто.

antares0 ★★★★ ()

Имеется лисп и клиенты (на самом деле на Дельфи, но будем считать, что они будут на питоне или чем-нибудь ещё).

Дай пять! Это всё меняет, хорошо, что ты не забыл написать об этом ;)

По теме, советую ознакомиться с базовыми вещами, иначе «раздраконивание» выльется в брутфорс-программинг

anonymous ()
Ответ на: комментарий от mv

Самое сложное тут, по-моему, шифрование.

В чём же сложность? Нет binding'ов к openssl/етц?

anonymous ()

- обмен между клиентом и сервером - по tcp/ip (сокеты?)

Протокол не HTTP? Если сервер на *nix, то iolib.

quasimoto ★★★★ ()
Ответ на: комментарий от den73

А hunchentoot разве на 50 соединениях пашет ещё?

А что с ним сделается?

archimag ★★★ ()

Я тебе скажу что надо делать, во-первых - берёшь два питона - один на сервер-сайд, один на клайент-сайд.

Далее 2 варианта:
1) берёшь RPyC и удивляешься как всё просто и чётко в 2 строчки можно написать рабочее приложение;
2) берёшь Twisted и удивляешь ещё больше - снова 2 строчки, только под рукой дичайше мощный фреймворк.

В итоге берёшь лисп за его скобочки и выбрасываешь поближе к исскуственному интеллекту и нечёткой логике и живёшь долго и счастливо.

shty ★★★★★ ()
Ответ на: комментарий от shty

питонофил в треде? нет пути :\

Расскажи-ка ты, бро, как пользователю полноценно работать с тредами в питоне.

anonymous ()
Ответ на: комментарий от anonymous

Расскажи-ка ты, бро, как пользователю полноценно работать с тредами в питоне.

import thread

и работай, полноценно

shty ★★★★★ ()
Ответ на: комментарий от archimag

Полноценно и GIL вроде никак между собой не сочетаются, нет?

я ждал этого вопроса :)

ну что-ж, поясни каким образом GIL помешает:

__пользователю__ полноценно работать с тредами в питоне

пользователю, блджад! таким образом, отвечая на данный вопрос можешь считать что вопрос задан про синтаксис языка и поддерживаемые примитивы синхронизации

shty ★★★★★ ()
Ответ на: комментарий от shty

В итоге берёшь лисп за его скобочки и выбрасываешь поближе к исскуственному интеллекту и нечёткой логике и живёшь долго и счастливо.

Ты привёл в качестве киллер-фич библиотеки для RPC и работы в стиле event-driven? Школьники смеются.

mv ★★★★★ ()
Ответ на: комментарий от shty

я ждал этого вопроса :)

Ну, его трудно не ждать. Вообще, всякий раз про Python и потоки надо сразу начинать с GIL.

Ну далее просто несерьёзно говорить.

archimag ★★★ ()
Ответ на: комментарий от shty

пользователю, блджад! таким образом, отвечая на данный вопрос можешь считать что вопрос задан про синтаксис языка и поддерживаемые примитивы синхронизации

Вопрос задан про степень поддержки многопроцессности в питоне. С GIL питоновская многопроцессность неполноценная.

mv ★★★★★ ()
Ответ на: комментарий от mv

Вопрос задан про степень поддержки многопроцессности в питоне.

1. нет
2. процессы в питоне поддерживаются без ограничений :)

shty ★★★★★ ()
Ответ на: комментарий от anonymous

толсто и глупо троллишь в этом треде. впрочем, как всегда

для общения с толстым и глупым анонимусом - как раз

shty ★★★★★ ()
Ответ на: комментарий от shty

2. процессы в питоне поддерживаются без ограничений :)

Как инвалиды на параолимпиаде. Никаких ограничений не накладывается, но...

mv ★★★★★ ()
Ответ на: комментарий от antares0

Другой вопрос что необходимость состояние и треды не одно и тоже

Нда, а есть в этом рациональное зерно. А в hunchentoot что, правда по треду на соединение? Сорсы посмотрел, вроде да, но вдруг я ошибаюсь? В общем, может, http и подошёл бы...

den73 ★★★★★ ()
Ответ на: комментарий от shty

они часто смеются, и часто не к месту :)

Это не означает, что в данном случае смех не по теме.

Перечисли случаи, когда GIL отпускается (кроме выполнения блокирущух вызовов внешнего API, вроде чтения/записи из/в файлы/дескрипторы)

anonymous ()
Ответ на: комментарий от mv

> 2. процессы в питоне поддерживаются без ограничений :)

Как инвалиды на параолимпиаде.

уверен ты просто не замечаешь что именно написал

hint: посмотри на что влияет GIL

shty ★★★★★ ()
Ответ на: комментарий от shty

Ты отлично защищаешь питон и приводишь убедительные аргументы в его пользу. Молодчина, многому научился и достиг вершин.

anonymous ()
Ответ на: комментарий от anonymous

они часто смеются, и часто не к месту :)

Это не означает, что в данном случае смех не по теме.

это не отменяет идиотичности ситуации когда школьники привлекаются как эксперты в той или иной области

shty ★★★★★ ()
Ответ на: комментарий от anonymous

Перечисли случаи, когда GIL отпускается (кроме выполнения блокирущух вызовов внешнего API, вроде чтения/записи из/в файлы/дескрипторы)

в общем случае при использовании многопоточности GIL работает

теперь моя очередь: оцени влияние GIL в контексте задачи ТС

shty ★★★★★ ()
Ответ на: комментарий от shty

идиотичность приведённой тобой ситуации не влияет на смех над GIL в питоне. да, молодец, что пишешь всегда по теме. никакого офтопика, перехода на личности. в наши дни такое редкость, особенно среди русских

anonymous ()
Ответ на: комментарий от anonymous

Ты отлично защищаешь питон и приводишь убедительные аргументы в его пользу. Молодчина, многому научился и достиг вершин.

прельстиво вещуешь странник, паки и паки разумно

shty ★★★★★ ()
Ответ на: комментарий от shty

неверно. Нужно так: "...has nothing to do with the real work". Сразу замечание: это у тебя «real work» такой, что ничего не требует. Не стоит обобщать.

Слушай, ты хоть каким-нибудь языком владеешь (хотя бы на среднем уровне)? Английский, пайтон, русский — везде у тебя ошибки.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.