使用Websharper进行实时客户端 - 服务器交互

时间:2012-11-11 01:23:25

标签: websharper

我只是在学习Websharper,但在短期内,我遇到了一个我正在努力解决的业务问题。我编写了一个服务器和基于WPF的客户端,允许用户使用滑块之类的控件来改变输入,并实时获取服务器的反馈(即没有“提交”按钮)。

我想使用Websharper将此桌面GUI应用程序转换为Web应用程序。我如何对用户滑动和滑块触发的服务器进行后台请求响应,并在网页中异步显示反馈?

3 个答案:

答案 0 :(得分:2)

我想最明显的方法是简单地为服务器端逻辑制作一堆[<Rpc>] - 装饰方法,然后在UI中的任何更改时调用它们。 IIRC,Websharper透明地处理客户端 - 服务器转换,即如果您调用服务器方法,则会触发必要的代理以获得结果。

答案 1 :(得分:2)

正如已经指出的那样,您可能依赖于RPC方法,但这可能会产生不可接受的延迟。

在IntelliFactory,我们正在开发一个项目,该项目需要服务器和客户端之间的异步双向和低延迟通信。我们最终使用了WebSocket协议。我们计划很快为具有类似要求的人员将代码记录并发布到可重用的库中。

WebSocket协议的主要优点是它允许在连接的服务器端维护状态。我们的服务器是在Windows Azure中运行的辅助角色。建立WebSocket连接时,Azure负载均衡器随机选择服务器,并且客户端在连接打开时与同一服务器通信。这样可以保持在服务器上初始化每个连接状态的成本很高。

WebSocket协议的缺点是缺乏旧版浏览器的支持。一种便携式低延迟替代方案是SignalR,它使用某种形式的HTTP轮询来模拟旧浏览器上的功能。不幸的是,到目前为止我们还没有使SignalR适应我们对Azure的要求。它理论上应该是可能的,但由于AFAIK SignalR遵循大多数无状态设计,因此需要编写路由器来重定向消息并“撤消”Azure负载均衡器的影响。

答案 2 :(得分:1)

我不知道WebSharper的集成点,但Rx有很多很好的概念和功能,用于功能和被动事件处理,如限制(需要滑块和异步网络调用)。

https://github.com/Reactive-Extensions/RxJS https://github.com/panesofglass/FSharp.Reactive