2012-11-11 4 views
2

저는 Websharper를 배우고 있습니다 만, 단기적으로는 해결하려고하는 비즈니스 문제가 있습니다. 필자는 서버와 WPF 기반 클라이언트를 작성하여 사용자가 슬라이더와 같은 컨트롤을 사용하여 입력을 변경하고 서버에서 실시간으로 피드백을 얻을 수 있도록했습니다 (즉, "제출"버튼이 없음).Websharper를 사용하여 실시간 클라이언트 - 서버 상호 작용

이 데스크탑 GUI 앱을 Websharper를 사용하는 웹 앱으로 변환하고 싶습니다. 사용자 슬라이딩 및 슬라이더에 의해 트리거 된 서버에 대한 백그라운드 요청 - 응답을 수행하고 웹 페이지에서 피드백을 비동기식으로 시각화 할 수 있습니까?

+1

http://www.websharper.com/samples/Chat을 보았습니까? –

답변

2

가장 확실한 방법은 서버 측 로직에 대해 [<Rpc>]으로 수정 된 메소드를 간단하게 만들고 UI의 변경 사항에 대해 간단히 호출하는 것입니다. IIRC, Websharper는 클라이언트 - 서버 전환을 투명하게 처리합니다. 즉, 서버 메소드를 호출하면 필요한 프록시가 실행되어 결과를 얻습니다.

1

WebSharper의 통합 지점을 모르지만 Rx에는 조절 (슬라이더 및 비동기 네트워크 호출에 대한 요구)과 같은 기능적 및 사후 대응적인 이벤트 처리를위한 많은 훌륭한 개념과 기능이 있습니다.

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

1

는 RPC 방법에 의존 할 수 있지만,이 받아 들일 수없는 대기 시간을 줄 수도 지적 한 바와 같이.

IntelliFactory에서 우리는 이제 서버와 클라이언트 간의 비동기 양방향 및 지연 시간이 짧은 통신이 필요한 프로젝트 작업을하고 있습니다. 우리는 WebSocket 프로토콜을 사용하여 끝내게되었습니다. 유사한 요구 사항을 가진 사람들에게 코드를 재사용 가능한 라이브러리에 문서화하고 출시 할 계획입니다.

우리의 목적을 위해 WebSocket 프로토콜의 가장 큰 장점은 연결의 서버 측에서 상태를 유지할 수 있다는 것입니다. 우리 서버는 Windows Azure에서 실행되는 작업자 역할입니다. WebSocket 연결이 설정되면 서버가 Azure로드 밸런서에 의해 임의로 선택되고 연결이 열려있는 동안 클라이언트가 동일한 서버와 통신합니다. 따라서 서버에서 연결 상태를 초기화하는 데 많은 비용을 필요로하지 않습니다.

WebSocket 프로토콜의 단점은 구형 브라우저가 지원하지 않는다는 것입니다. 이식성이 낮은 대기 시간이 짧은 대안은 SignalR로, 일부 형태의 HTTP 폴링을 사용하여 구형 브라우저의 기능을 에뮬레이션합니다. 불행히도 우리는 지금까지 Azure에 대한 우리의 요구 사항에 맞게 SignalR을 조정하지 못했습니다. 이론적으로는 가능해야하지만 AFAIK SignalR은 주로 stateless 디자인을 따르므로 라우터를 코딩하여 메시지를 리디렉션하고 Azure로드 밸런서의 효과를 "실행 취소"해야합니다.

관련 문제