我剛剛學習Websharper,但在短期內,我遇到了一個我正在嘗試解決的業務問題。我編寫了一個服務器和基於WPF的客戶端,允許用戶使用滑塊等控件改變輸入,並實時獲得服務器的反饋(即沒有「提交」按鈕)。使用Websharper的實時客戶端 - 服務器交互性
我想使用Websharper將此桌面GUI應用程序轉換爲Web應用程序。我該如何處理由用戶滑動和滑動觸發的服務器的後臺請求 - 響應,並導致反饋在網頁中異步顯示?
我剛剛學習Websharper,但在短期內,我遇到了一個我正在嘗試解決的業務問題。我編寫了一個服務器和基於WPF的客戶端,允許用戶使用滑塊等控件改變輸入,並實時獲得服務器的反饋(即沒有「提交」按鈕)。使用Websharper的實時客戶端 - 服務器交互性
我想使用Websharper將此桌面GUI應用程序轉換爲Web應用程序。我該如何處理由用戶滑動和滑動觸發的服務器的後臺請求 - 響應,並導致反饋在網頁中異步顯示?
我想最明顯的方法是簡單地爲您的服務器端邏輯創建一堆[<Rpc>]
-修飾的方法,然後在UI中進行任何更改時調用它們。 IIRC,Websharper透明地處理客戶端 - 服務器轉換,即如果您調用服務器方法,必要的代理將觸發以獲得結果。
我不知道WebSharper的集成點,但是Rx有許多很好的概念和函數用於功能性和反應性事件處理,比如節流(需要滑塊和異步網絡調用)。
https://github.com/Reactive-Extensions/RxJS https://github.com/panesofglass/FSharp.Reactive
正如已經指出的那樣,你可以依靠RPC方法,但這可能會給不可接受的延遲。
在IntelliFactory,我們現在正在開發一個需要服務器和客戶端之間的異步雙向和低延遲通信的項目。我們最終使用了WebSocket協議。我們計劃很快爲具有相似要求的人員編寫代碼並將其發佈到可重用的庫中。
對於我們的目的,WebSocket協議的主要優點是它允許在連接的服務器端維護狀態。我們的服務器是在Windows Azure中運行的工作者角色。當建立WebSocket連接時,服務器由Azure負載平衡器隨機選擇,並且客戶端在連接打開時與同一服務器對話。這使得維護服務器上每個連接狀態的初始化成本很高。
WebSocket協議的缺點是缺乏舊版瀏覽器的支持。一種便攜式低延遲替代品是SignalR,它使用某種形式的HTTP輪詢來模擬舊版瀏覽器的功能。不幸的是,我們迄今未能使SignalR適應Azure的要求。理論上這應該是可能的,但由於AFAIK SignalR遵循大多數無狀態設計,因此需要對路由器進行編碼以重定向消息並「撤消」Azure負載平衡器的影響。
您是否看到過http://www.websharper.com/samples/Chat? –