本文介绍了服务器将数据从Clojure推送到ClojureScript的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在用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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-26 02:37