代码之家  ›  专栏  ›  技术社区  ›  Abhishek

服务器端的Comet应用程序应该使用什么代码

  •  0
  • Abhishek  · 技术社区  · 17 年前

    我正在开发一个聊天应用程序,我使用简单的Ajax轮询来检索新的聊天,但是它的工作很好,因为没有更多的xmlhttp请求来检查在线状态并将聊天发送给其他人,还有一些是由于其他原因,所以我认为我的表单中有很多请求,这就是为什么它不能工作的原因,所以现在我想用C语言来做这些事情。欧梅风格。所以请告诉我怎么做。

    这是严重的密码

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

    在客户方,我被安排了一段时间来持续检查。

    2 回复  |  直到 17 年前
        1
  •  0
  •   spender    17 年前

    你知道彗星是什么吗?这意味着让HTTP连接处于挂起状态(就像下载已经停止一样),直到服务器有一些有趣的事情告诉客户机。

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

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

    编写Comet服务器并不是一件小事。在开始如此危险的冒险之前,你似乎需要更好地理解这些概念。

        2
  •  0
  •   Todd Richardson    17 年前

    我不能很好地回答您的问题,因为到目前为止,您包含的代码还不清楚您的服务器在做什么。Comet很不错,但它不是万能药,正如前面提到的,为了成功实现它,您需要理解一些概念。

    我建议您熟悉ASP.NET页面的页面生命周期、该生命周期在客户端请求对象(read xmlhttprequest.readystate,)中的表示方式以及服务器的表示方式。

    根据我的经验,就您所包含的代码而言,调用response.end()或使用函数的结尾将关闭响应,而这不一定是您希望发生的事情。

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

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

    要获得良好的阅读效果,请查看Comet和Reverse Ajax(通过apress提供)