sách gpt4 ăn đã đi

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

In lại Tác giả: Walker 123 更新时间:2023-11-29 17:22:15 26 4
mua khóa gpt4 giày 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 服务应该实现一些静态事件来管理我需要的所有通知。

任何建议将不胜感激。谢谢。

câu trả lời hay nhất

对于 WCF,您可以通过使用长轮询等技术来实现这一点,但显然这并不容易。看这个example关于如何

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

更新 2

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

更新 3

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

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

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

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

sử dụng Wcf and Long Polling 查看此聊天服务器的实现

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

26 4 0
Walker 123
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress