Size: a a a

Clojure — русскоговорящее сообщество

2021 January 26

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
А что тут нужно сделать асинхронным?
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
Mikhail Borisov
Я правильно понял, что нужно реализовать pub часть?
наобророт  sub, и как правильно его приготовить
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Насколько я представляю, отправка сообщения в вебсокет неблокирующая. Тогда пройтись по всем сабскрайберам и кинуть им сообщения вроде нормально и в одном потоке
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
есть один паблишер, есть куча сабов, сабы должны слать каждый в свой сокет (веб-сокет) , так как сокет может тормозить (и наверняка будет), то при срабатывании очередного события, я бы не хотел, чтобы все повисло на медленном сокете
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Mikhail Borisov
Насколько я представляю, отправка сообщения в вебсокет неблокирующая. Тогда пройтись по всем сабскрайберам и кинуть им сообщения вроде нормально и в одном потоке
Отправка сообщения в сокет неблокирующая?
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
блокирующая наверное (вебсервер)
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
очередей точно нет пока
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Ну если блокирующая, тогда можно наверное future или thread в вотчере запускать
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Но я на своей памяти не припомню блокирующей отправки в вебсокет)
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
Вот что в документации
Typically, the streamer will create a thread, core.async process, or other long-lived construct to feed values to the source stream.
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Там же даже понятия "ответа" нет, зачем блокироваться то? Мне кажется стоит уточнить
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Alexey Cheremisin
Вот что в документации
Typically, the streamer will create a thread, core.async process, or other long-lived construct to feed values to the source stream.
add-watch просто коллбэк будет вызывать, это точно не long-lived
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
Mikhail Borisov
Там же даже понятия "ответа" нет, зачем блокироваться то? Мне кажется стоит уточнить
если атом, то мне достаточно прихранить сам инстанс сокета, тогда по идее, мне ничего не нужно... и оно работает...
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
(def testa (atom nil))

(defn log-message-streamer
 [context args source-stream]
 ;; Create an object for the subscription.
 (add-watch testa source-stream
            (fn [s a o n]
              (source-stream n)))
 #(remove-watch testa source-stream)
 )
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Да вроде и должно) Надо бы только проверить (в идеале), что произойдет, если сокет на другой стороне тихо умрет, а сервер попытается отправить ему сообщение
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
наверное лучше в feature завернуть...
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Мне кажется, будет либо ничего, либо эксепшн
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
не, эксепшион не выпал, завернул в футуру
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Мне кажется, что футура все таки лишняя, но я на кофейной гуще гадаю)
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
увы, я тоже... но кажется, если проблемы будут, то лучше пусть футура, чем дидлок
источник