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

使用Websharper的实时客户端-服务器交互,websharper,Websharper,我只是在学习Websharper,但在短期内,我有一个商业问题,我正试图解决。我已经编写了一个基于服务器和WPF的客户端,允许用户使用诸如滑块之类的控件更改输入,并从服务器实时获取反馈(即没有“提交”按钮) 我想使用Websharper将此桌面GUI应用程序转换为web应用程序。我该如何对由用户滑动和滑动触发的服务器进行后台请求响应,从而在网页中异步显示反馈?我认为最明显的方法是简单地制作一堆[]-为服务器端逻辑修饰方法,然后在用户界面发生任何更改时简单地调用它们。IIRC,Websharper

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


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

我认为最明显的方法是简单地制作一堆
[]
-为服务器端逻辑修饰方法,然后在用户界面发生任何更改时简单地调用它们。IIRC,Websharper透明地处理客户机-服务器转换,也就是说,如果您调用服务器方法,必要的代理将启动以获得结果。

我不知道Websharper的集成点,但Rx有许多很好的概念和功能,用于功能性和反应性事件处理,如节流(需要滑块和异步网络调用)


https://github.com/panesofglass/FSharp.Reactive

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

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

我们使用WebSocket协议的主要优点是,它允许维护连接服务器端的状态。我们的服务器是在Windows Azure中运行的工作角色。在建立WebSocket连接时,Azure负载平衡器会随机选择服务器,客户端会与同一服务器对话,而连接已打开。这允许在服务器上对每个连接状态进行初始化

WebSocket协议的缺点是缺乏旧浏览器的支持。一种可移植的低延迟替代方案是Signal,它使用某种形式的HTTP轮询来模拟旧浏览器上的功能。不幸的是,我们迄今为止未能使Signal适应Azure上的要求。理论上这是可能的,但因为AFAIK Signal遵循一种基本上无状态的设计,这需要对路由器进行编码以重定向消息并“撤消”Azure负载平衡器的效果。

您看到了吗?