Поскольку fulcro-websockets 3.1.0 подключение веб-сокета выполняется при первой передаче данных через удаленный веб-сокет.
Если вы хотите принудительно установить соединение, вы можете сделать это, отправив любая мутация через пульт:
(:require [com.fulcrologic.fulcro.mutations :refer [defmutation]
[com.fulcrologic.fulcro.components :as comp])
(defmutation connect-socket [_]
(websocket [_] true))
(comment
;; trigger it via repl or a button handler
(comp/transact! foo.client/SPA `[(connect-socket {})]
После того, как вы установили соединение, вы можете сделать pu sh с сервера следующим образом:
(:require [com.fulcrologic.fulcro.networking.websocket-protocols :refer [push]])
(let [client-uid (-> @(:connected-uids websockets')
:any
first)]
(push websockets' client-uid :foo-topic {:foo "bar"}))
Чтобы получить это на клиенте, вам понадобится :push-handler
, определенный на пульте websocket
:
(defn push-handler [{:keys [topic msg] :as data}]
(log/info "push-handler received: " data))
;; optionally you can listen for websocket state changes
(defn state-callback [before after]
(log/info "state-callback: " {:before before
:after after}))
(defn ^:export init []
(reset! SPA (fc/make-fulcro-client
{:client-did-mount (fn [foo]
(df/load foo :all-users root/User))
:remotes {:remote (net/fulcro-http-remote
{:url "/api"
:request-middleware secured-request-middleware})
:websocket (fws/fulcro-websocket-remote
{:push-handler push-handler
:state-callback state-callback})}}))
(start))
Кстати, так как вы используете шаблон mount
, вы можете использовать его для обработки websockets'
на сервер:
(defstate websockets'
:start
(fws/start! (fws/make-websockets
query-parser
{:http-server-adapter (get-sch-adapter)
:parser-accepts-env? true})))
Таким образом, вы можете избежать этой строки: (reset! websockets' websockets)