gpt4 book ai didi

c# - 聊天 - 获取新消息可用性的最佳方式

转载 作者:行者123 更新时间:2023-11-29 17:22:15 26 4
gpt4 key购买 nike

我正在使用启用的 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,您可以通过使用长轮询等技术来实现这一点,但显然这并不容易。看这个example关于如何

有许多 JS 库可以让您轻松完成这项工作。 SignalR是其中之一看这个Wiki关于如何

更新 2

如果您使用的是 Wcf 4.5,完成此任务的另一种方法是使用网络套接字。聊天应用程序需要基于推的技术而不是基于拉的技术。 Wcf 4.5 通过支持 Web 套接字为您提供了这种能力。 Example

更新 3

如果您决定使用长轮询,那么您就不必使用异步方法。长轮询将按以下方式工作。

  1. 向服务器发送请求。
  2. 等到响应到来,或者超时
  3. 去找客户,提出另一个要求。

因此,与其使用异步结果(因为从 JS 对 Web 服务的调用已经是异步的),不如使用普通方法和线程信号技术,如 WaitOne(等待新请求到来)和 ManualResetEvent 信号,一些请求来了。

注意,长轮询比轮询好得多,因为响应始终是最新的。

使用 Wcf and Long Polling 查看此聊天服务器的实现

关于c# - 聊天 - 获取新消息可用性的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11789338/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com