簡體   English   中英

Linux Web Server和.NET Client應用程序之間的實時通信

[英]Real-Time Communication Between Linux Web Server and .NET Client Application

我要做什么

開發一個C#WPF Windows應用程序,該應用程序可以使用運行帶有MySQL的CentOS 6 Linux的中央Web服務器向其他WPF應用程序發送和接收數據。

  • WPF客戶端必須能夠向服務器發送消息,並且必須能夠實時偵聽服務器中的消息並在消息發布后立即對其進行顯示。

  • 服務器端程序應該能夠將其中一些消息解析為.NET數據對象,並且應該能夠將消息廣播給所有客戶端或僅特定客戶端。

  • 如果客戶端收到某條消息,它將在本地應用程序上執行一個方法。
  • 每台客戶端計算機都將在帶有.NET 4.5或更高版本的Windows 7、8或10上運行,並且將使用Windows防火牆,盡管某些客戶端計算機可能具有其他第三方防火牆軟件。

此外,如果服務器程序可以處理來自移動應用程序(Android應用程序至服務器-服務器至WPF客戶端,反之亦然)以及WPF客戶端的請求,則這將是非常可取的,但不是必需的。


服務器 (德克薩斯州的服務器)

管理員客戶端 (加利福尼亞用戶)

客戶端2 (佛羅里達州的用戶)

客戶端3 (紐約用戶)

  1. 我從計算機Admin Client向服務器發送了一個“ hello”廣播。

  2. 服務器接收消息並向所有偵聽客戶端廣播“ hello”。

  3. 客戶端2和客戶端3在其客戶端上顯示“ hello”,並回答“嘿!”。

  4. 服務器收到“嘿!” 消息並將它們都發送到Admin Client。

  5. 我發送一條消息“ open sesame”,該消息僅在客戶端2的應用程序上執行RunOnMagicWord()方法,而對客戶端3無任何作用。

  6. Client2運行RunOnMagicWord()並發送“完成!” 方法執行后發送給服務器的消息。

  7. 服務器收到“完成!” 消息並發送給Admin Client。


我所期待的

  • REST / JSON
  • WCF服務
  • ASP.NET MVC
  • PHP腳本
  • SignalR
  • 套接字
  • HttpClient的

我寧願將所有內容(包括服務器端程序)都保留在C#.NET中,以便可以輕松地序列化客戶端之間和發送給服務器的數據。 SignalR似乎與我要尋找的最接近,但是在我看來,它僅適用於IIS,不適用於Apache / Linux。 我沒有選擇切換到IIS的選項,而且感覺好像我可能使整個過程過於復雜,所以...


我的問題

我是否正沿着正確的道路看着使用SignalR之類的東西? 如果是這樣,如何使它在我的CentOS服務器上運行? 還是有一種更簡單的方式將Linux / MySQL服務器提供給.NET應用程序這種功能?


編輯:添加了我嘗試過的其他內容,重新格式化了段落,添加了我對此項目的其他限制以回應評論

您提到的所有內容都可以使用。 但是,應由業務需求和約束來決定應該使用什么:

  • signalr和websockets不是可靠的傳遞機制。 消息可能會丟失。 使用它來發送客戶通知,如果郵件未傳遞,則風險較低
  • Web服務(休息或肥皂)是同步的,也是點對點的。 如果一方沒有回應怎么辦? 帶有Rest的WebApi將最容易實現,並且可以跨平台工作。 使PHP與.NET輕松對話,只需記錄並共享您的消息模式即可
  • 諸如RabbitMq,MSMQ,Azure服務總線/隊列之類的消息代理是異步且可靠的,但實現起來卻有些復雜。 您將獲得適當的彈性,並獲得交付確認。

對於這種聊天功能,Linux上的SignalR和mono .net應用程序應該可以正常工作。 另外,Signalr並不是這里唯一的選擇,您可以使用.net的許多websocket實現,例如https://github.com/StackExchange/NetGain

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM