0

我正在开发一个聊天应用程序,我正在使用简单的 ajax 轮询来检索新的聊天,但它工作得很好,因为几乎没有 xmlHttp 请求来检查在线状态并将聊天发送给其他人以及其他一些原因,所以我认为有我的表格中有很多请求,这就是为什么它不起作用所以现在我想以彗星风格做这些事情。所以请告诉我该怎么做。

这是服务器端代码

Dim output As String = JavaScriptConvert.SerializeObject(newChat)               
                    Response.Flush()
                    Response.Clear()
                    Response.Write(output)
                    Response.End()

在客户端,我设置了一个超时时间来持续检查。

4

2 回答 2

0

你明白彗星是什么,对吧?这意味着让 http 连接处于挂起状态(好像下载已经停止),直到服务器有一些有趣的事情要告诉客户端。

客户端不会有超时。如果当前下载结束,它只会再次请求。

服务器上可能会发生超时,以尝试抢占从服务器到客户端(代理等)的路由上的硬件中可能发生的网络超时。

编写 Comet 服务器并非易事。在开始如此危险的冒险之前,您似乎需要更好地理解这些概念。

于 2009-09-14T10:20:26.260 回答
0

我真的不能很好地回答你的问题,因为到目前为止你所包含的代码并不清楚你的服务器正在做什么的背景。Comet 很好,但它不是灵丹妙药,如前所述,您需要了解一些概念才能成功实施。

我建议您非常熟悉 asp.net 页面的页面生命周期,该生命周期如何在客户端的请求对象中表示(阅读 xmlhttprequest.readystate)以及您的服务器如何表示。

至于您包含的代码,根据我的经验,调用 Response.End() 或结束函数会关闭响应,这不一定是您想要发生的。

在我们使用的自定义服务器中,我使用事件等待句柄来发出信号并等待来自客户端的用户输入。我还必须确保如果用户发送大量请求,数据要么在服务器上正确打包和处理,要么这些请求不会阻塞视图状态线程(它将输出处理回客户端。 )

我相信,当您只使用两个请求时,可以实现最少的复杂性。(我相信这也符合规范,但我似乎无法在 atm 找到它。)

如需阅读,请查看 Comet 和 Reverse Ajax(可通过 apress 获得)

于 2009-09-16T20:09:39.917 回答