簡體   English   中英

聊天-獲取新郵件可用性的最佳方法

[英]Chat - Best way to fetch new message availability

我正在通過啟用Ajax-Wcf服務來開發Asp.Net聊天。 這是一個非常簡單的聊天引擎,其中消息對話框意味着一對一(單個用戶),但是我不知道如何管理(以最佳方式)通知新消息的可用性。 例如,假設存在以下情況:

每當我需要從一個用戶向另一個用戶發送新消息時,我都會編寫如下的javascript代碼:

// btnSend client event handler
MyWcfNamespace.MyWcfClass instance = new ..();
instance.CallMethod("message string", callBackFunction, null);

好吧,這很簡單。 現在,從另一端(將接收我的消息的用戶),需要某種機制以便知道何時發送了新消息。 我以為可以使用ajax計時器來調用另一個wcf方法,如果有可用的話,它會返回我的字符串消息,如果沒有則返回空字符串,但是我認為這是最好的方法。

如果存在通過javascript注冊某些wcf事件的某種方式,那就太好了:

// javascript code:
MyWcfNamespace.MyWcfClass instance = new ..();
instance.OnNewMessageAvailable = myJavascriptCallBackFunction;
// And on CallBack function..
function myJavaScriptCallbackFunction(msg) {
alert('new message arraived:' + msg):
}

顯然,我的wcf服務應該實現一些靜態事件,以管理我需要的所有通知。

任何建議將不勝感激。 謝謝。

使用WCF,您可以使用長輪詢之類的技術來實現此目的,但是顯然這並不容易。 看這個例子

有許多JS庫可以使您輕松工作。 SignalR就是其中之一看看這個維基如何

更新2

如果您使用的是Wcf 4.5,則完成此任務的另一種方法是使用Web套接字。 聊天應用程序需要基於推送的技術,而不是基於推送的技術。 Wcf 4.5通過支持Web套接字為您提供這種功能。

更新3

如果您決定使用長輪詢,則不必使用異步方法。 長輪詢將如下工作。

  1. 將請求發送到服務器。
  2. 等到響應到來或超時
  3. 轉到客戶,再提出一個請求。

因此,與其使用異步結果(因為從JS調用Web服務已經是異步的),不如將普通方法與線程信號傳遞技術(如WaitOne(用於等待新請求到來)和ManualResetEvent用於信號傳遞)一起使用,某些請求已經到來。

注意,長輪詢比輪詢好得多,因為響應始終是最新的。

查看使用Wcf和Long Polling的Chat Server的實現

您還可以使用Websockets建立持久連接。

這個SignalR示例也將很有用。

暫無
暫無

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

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