问题描述
我正在用Clojure编写应用程序服务器,该服务器将在客户端上使用ClojureScript。
I'm writing an application server in Clojure that will use ClojureScript on the client.
我想找到一种高效,惯用的方式来从中推送数据将服务器作为实时事件发送到客户端,最好使用以下组合:
I'd like to find an efficient, idiomatic way to push data from the server to the client as realtime events, ideally using a some combination of:
- http-kit
- core.async
- Ring
(但我愿意接受其他可能性)
(But I'm open to other possibilities)
任何人都可以提供一个很好的例子/方法来做到这一点吗?
Can anyone provide a good example / approach to doing this?
推荐答案
我更喜欢使用,这里是,您只需使用 wrap-ring-handler
函数包装现有的处理程序即可。
I prefer to use aleph, here is the wiki, you can simply use wrap-ring-handler
function to wrap existed handlers.
对于 push功能,最有用的部分是aleph的异步处理程序。它建立在netty之上,而不是一个连接一个线程的模型,因此服务器端无需担心tcp连接数。
For the 'push' function, most useful part is aleph's async handler. It builds on top of netty, not a one connection one thread model, so the server side do not need worry about the tcp connection count.
一些实现细节:
- 服务器端使用aysnc处理程序,保留所有客户端连接(通道)
- 在60(例如)秒内,如果没有新数据,则发送空响应
- 如果服务器
- 客户端可以简单地向服务器发送正常的http请求
- 当客户端获得响应时,处理响应正文,然后再次重新发送http请求
- 请检查客户端和所有代理服务器以设置正确的超时值
- Server side use aysnc handler, hold all the client connections (channels)
- In 60(for example) seconds, if there is no 'new data', send an empty response
- if server side has a response ,send it.
- The client side can simply send a normal http request to the server
- when the client get the response, handle the response body, and then, re-send a http request again
- please check the client and all the proxy servers to set the correct timeout value
这里有更多方法:
这篇关于服务器将数据从Clojure推送到ClojureScript的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!