使用WebSharper实时客户服务器交互



我只是在学习WebSharper,但是在短期内,我有一个尝试解决的业务问题。我已经编写了一个基于服务器和WPF的客户端,该客户端允许用户使用滑块之类的控件来改变输入,并实时从服务器获得反馈(即没有"提交"按钮)。

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

我想最明显的方法是简单地为您的服务器端逻辑制作一堆[<Rpc>]装修方法,然后简单地将它们调用UI中的任何更改。IIRC,WebSharper透明地处理客户端服务器过渡,即如果您调用服务器方法,必要的代理将触发您的结果。

正如您指出的,您可以依靠RPC方法,但这可能会产生不可接受的延迟。

在Intellifactory上,我们现在正在研究一个项目,该项目需要服务器和客户端之间的异步双向和低延迟通信。我们最终使用了Websocket协议。我们计划很快将代码记录并发布到可重复使用的库中,以适应类似要求的人。

出于我们的目的,Websocket协议的主要优势是它允许在连接服务器端维护状态。我们的服务器是在Windows Azure中运行的工作角色。当建立WebSocket连接时,Azure Load Balancer随机选择服务器,并且在连接打开时,客户端与同一服务器对话。这允许维护昂贵的服务器上的每连接状态。

Websocket协议的缺点是缺乏较旧的浏览器的支持。便携式低延迟替代方案是SignalR,它使用某种形式的HTTP轮询来模仿较旧浏览器的功能。不幸的是,到目前为止,我们还没有适应我们对Azure的要求。理论上应该是可能的,但是由于Afaik Signalr遵循大多无状态的设计,这将需要编码路由器以重定向消息并"撤消" Azure Load Balancer的效果。

我不知道WebSharper的集成点,但是RX具有许多不错的概念和功能,用于功能和反应性事件处理(例如slider和slider和async网络呼叫)。

https://github.com/reactive-extensions/rxjshttps://github.com/panesofglass/fsharp.reactive

最新更新