Pull to refresh

Comments 22

class Dummy(object):
        pass

    django_request = Dummy()
    django_request.session = session


вот почему-то мне всегда не нравится такой код, тем более есть namedtuple для таких вещей

В emit можно просто передать dict и на клиенте получить объект, и не надо будет делать msg = JSON.parse(msg);
Действительно, спасибо!
В начале вы говорите, что не хотите писать на торнадо, а потом берете и юзаете его :(
Нет, я говорю, что не хочу переписывать всё на торнадо. Т.е. всю биржу. Здесь же на нём лишь та часть которая нужна и её раньше не было.
какой из меня гуру, ну спасибо конечно) По поводу слайдов небольшая история. Я в проекте занимался примерно тем, что там на слайдах; было интересно, и примерно за месяц до начала конференции заявку на DevConf отправил — думал, как раз за месяц в тонкостях доразбираюсь. Но как отправил, проект сразу накрылся (по нетехническим причинам), и в итоге ничего в продакшн не пошло, а я другими вещами занялся. Так что на практике не знаю, хороший ли там подход, или плохой, и доклад пришлось рассказывать по теме, в которой опыта почти нет (доклад был ужасным). В слайдах есть пара штук, которые точно лучше поправить (вместо порта лучше использовать поддомен + вместо socket.io лучше socks.js + магия там экспериментальная). Авторы socket.io, похоже, больше самопиаром занимаются (успешно), чем тем, чтоб код работал.

С другой стороны, основная идея (что не нужно все переписывать, и лучший вариант часто — это синхронный фреймворк + асинхронный сервер отдельно) мне все еще кажется правильной и заслуживающей бОльшего внимания. Недавно вот Armin Ronacher про то же самое писал: lucumr.pocoo.org/2012/8/5/stateless-and-proud/
Спасибо, ознакомлюсь — Армин знает что пишет. В любом случае и этот метод вполне рабочий оказался… И на питоне — что особенно удобно.
Прочитал Армина, собственно он это и описал, только тут Django вместо flask
Ваш ответ ещё любопытнее, учитывая, что вся статья про торнадо. Получается вы всё соорудили на нём, а потом переписали на node.js? Почему?
А, так вопрос всё-таки мне. Нет соорудили на том и так как написано в статье. Собственно я не понял откуда сомнения?
Добавил вариант с sockjs
А не использовали ли вы WSS (WebSocketSecure) с поддержкой SSL
У меня проблемы с самоподписанным сертификатом в Safari он там выдает странную ошибку и переходит в режим XHR.

Я настраивал через Nginx Tcp proxy это дело, т.е. Nginx у меня занимался SSL шифрованием и после проксированием к tornadio2

Спасибо за статью.
Нет, с шифрованием не заморачивался, т.к. у меня через сокеты ходит несущественная инфа, а все манипуляции и текст идут по https. Возможно проблема в nginx т.к. он вроде не особо дружит с websocket ещё… У меня, как видно, сокеты на отдельном порту, чтоб nginx обойти как раз.
Прошли похожую эволюцию от чистого Pyramid к Pyramid + Tornado + TornadIO2 + Redis как общая шина. Потом отказались от socket.io в пользу sockjs и sockjs-tornado. Не могу указать конкретно, в чём корень проблем socket.io, но со стабильностью соединения и задержками стало гораздо лучше. К тому же sockjs не настолько node-центричен, протокол проще и прозрачнее.
Ещё я в процессе понял, как ненавижу программирование на коллбэках (асинхронный сервер у нас содержит приличный объём логики), но переписывать этот кусок на Erlang пока не велит bus factor, хотя прототип был сваян и опробован.
Спасибо за комментарий! Уже не первый человек говорит о недостатках socket.io — значит будем менять. Мне показалось у него какое-то странное поведение после несанкционированного разрыва соединения…
А зачем в торнадо писать на callback'ах если есть tornado.gen?

Единственное что надо не забывать вызывать callback, но я вот написал себе такой вот велосипед и он отлично работает: gist.github.com/3924669

#1 — где лежит исходник
#2 — как писать
#3 — аналог с текущим gen.engine
#4 — как можно писать в python 3.3+ (return в генераторе кидает StopIteration)

Реально используется в боевом приложении. Единственный минус — надо не забывать асинхронные вызовы оборачивать в gen.Task, а то иначе не происходит вызова.
Писали мы конечно с tornado.gen и это отличная обёртка, но абстракция все равно течёт. Ладно, можно один раз проковырять исходники tornado и понять, как здесь реализовали кооперативную многозадачность на этот раз. Но больше всего напрягает, что синхронный и асинхронный код в Питоне — разные миры. Да, иногда можно забить на блокирующие операции сторонних библиотек. Можно вынести их в отдельный поток/процесс и общаться через очередь. Только после всего этого невольно возникает вопрос: а за тот ли молоток я вообще взялся?
Да, согласен, абстракция течет.

А с эрлангом та же проблема — очень тяжело найти людей.

Везде приходится искать какие-то компромиссы.
Добавил вариант с sockjs.
Sign up to leave a comment.

Articles

Change theme settings