如何使用ASP.NET开发基于推技术的聊天室?

huhe 2003-06-12 12:56:00
前一段我用APS.NET作了一个基于拉技术的聊天室,后来想在其中增加点游戏内容,感觉到基于拉技术的响应实时性不好,所以想改为基于拉技术的。
现已作了尝试,代码如下:

// Content.aspx.cs ///////////////////////////////////////////////////////
public class Content : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
Session.Timeout = 60;
Response.Write("欢迎 . . .<br>\n");
Response.Flush();
Application[Session.SessionID] = Response;
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
}
}


// Send.aspx.cs //////////////////////////////////////////////////////////
public class Send : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button ButtonSend;
protected System.Web.UI.WebControls.TextBox TextBox1;

private void ButtonSend_Click(object sender, System.EventArgs e)
{
foreach(string name in Application.AllKeys)
{
HttpResponse Response = Application[name] as HttpResponse;
if(Response!=null && Response.IsClientConnected)
{
Response.Write(TextBox1.Text + "<br>\n");
Response.Flush();
}
else
{
Application.Remove(name);
}
}
}
}

可以聊天,但发现一大问题:同时连接的用户被限制在50个左右,再多的就连不上了,并且会导致其他用户也陷于停滞状态。
请高手答疑解惑,还可另开贴给分!
...全文
138 56 打赏 收藏 转发到动态 举报
写回复
用AI写文章
56 条回复
切换为时间正序
请发表友善的回复…
发表回复
huhe 2003-06-29
  • 打赏
  • 举报
回复
OnlyExpect(冻冻)提到的“isapi 在实现时有着严格的线程限制”出现在:
http://netbox.zydsoft.com/Document/?http://netbox.zydsoft.com/Document/Document/AtFirst.Document.Push.htm
《用 NetBox 实现 asp 的推技术》

一直以来,如何用 asp 技术实现推技术的聊天室,都是困扰 asp 程序员的一个难题。不同的解决方案,不同的尝试,结果却一直不能令人满意,主要有以下几个问题:

一、iis 的线程问题。由于推技术的实现必须以独立线程为基础,即每一个推连接必须占用一个线程,直至此连接结束为止。iis 的 asp 是基于 isapi 技术的,而 isapi 在实现时有着严格的线程限制,只能创建很少的线程,直接导致了很少的推连接数。

二、推线程的等待问题。正是因为 iis 在 isapi 管理上面的限制,asp 在实现时是假设程序是绝对不会进入等待的,所以在 asp 中间隔一段时间几乎是不可能的。于是有些开发人员为了实现延时效果,采用了不断判断时间的死循环的方法。殊不知这种循环几乎只需要一个就足以吃掉全部的 cpu 资源。

而使用 NetBox 则没有此类问题。NetBox 的实现采用了自由线程,可创建的线程总数只受限于系统限制,远远高于 iis 的线程限制,在 asp 中适当等待已经不再成为问题。同时 NetBox 的 asp 支持一个新的 NetBox 内建对象,所包含的 Sleep 方法更加方便的实现低负载的等待。

下面就是一段简单的推技术的演示代码:

<%Response.Buffer = false%>
<html>
<body>
<br>
<%Do While Response.IsClientConnected
NetBox.Sleep 1000
Response.Write now & "<br>"
Loop%>



不知道还有没有更权威的报道?


huhe 2003-06-29
  • 打赏
  • 举报
回复
问题已经解决,感兴趣的朋友可参阅:
http://www.microsoft.com/china/msdn/library/dnservice/html/service10012002.asp
《服务器端异步 Web 方法》

to: OnlyExpect(冻冻)
请问:“isapi 在实现时有着严格的线程限制”在那里可以查到?
huhe 2003-06-28
  • 打赏
  • 举报
回复
to: daveyao(dave.yao)
你用的是推技术还是拉技术?
huhe 2003-06-28
  • 打赏
  • 举报
回复
to: jjstar(北人)
多谢你提供网址。
文章我详细看了,它的页面是刷新的,没有解决我的问题 :(
fa2002 2003-06-28
  • 打赏
  • 举报
回复
up
OnlyExpect 2003-06-28
  • 打赏
  • 举报
回复
一、iis 的线程问题。由于推技术的实现必须以独立线程为基础,即每一个推连接必须占用一个线程,直至此连接结束为止。iis 的 asp 是基于 isapi 技术的,而 isapi 在实现时有着严格的线程限制,只能创建很少的线程,直接导致了很少的推连接数。
二、推线程的等待问题。正是因为 iis 在 isapi 管理上面的限制,asp 在实现时是假设程序是绝对不会进入等待的,所以在 asp 中间隔一段时间几乎是不可能的。于是有些开发人员为了实现延时效果,采用了不断判断时间的死循环的方法。殊不知这种循环几乎只需要一个就足以吃掉全部的 cpu 资源。
TYmir 2003-06-27
  • 打赏
  • 举报
回复
能给我一份吗??

tymir@163.net谢谢:)
shixueli 2003-06-27
  • 打赏
  • 举报
回复
to daveyao(dave.yao)

xmlhttp是什么?能说一下么?
delphi_bird 2003-06-27
  • 打赏
  • 举报
回复
收藏
daveyao 2003-06-26
  • 打赏
  • 举报
回复
聊天室的无刷新技术的确很吸引人,本人用隐藏帧实现,但感觉还是用xmlhttp是以后的主流方向
lihonggen0 2003-06-26
  • 打赏
  • 举报
回复
UP
jjstar 2003-06-26
  • 打赏
  • 举报
回复
http://www.fawcette.com/vsm/2002_11/magazine/features/chester/default.asp

楼主仔细看这篇文章,里面给出的代码不知道对你有用没?
jxf_yx 2003-06-25
  • 打赏
  • 举报
回复
up
add8848 2003-06-25
  • 打赏
  • 举报
回复
牛B
weixcan 2003-06-25
  • 打赏
  • 举报
回复
能发给我研究一下吗?
nobird1022@hotmail.com
Kain 2003-06-25
  • 打赏
  • 举报
回复
给份代码可以吗
ghost_sea@371.net

我也一直在找这方面的问题,如果可以大家一起研究拉

plblackeagle 2003-06-25
  • 打赏
  • 举报
回复
能给份代码研究一下吗?
plblackeagle@163.com
shang515 2003-06-25
  • 打赏
  • 举报
回复
to :huhe(胡呵)
能给份代码研究一下吗?

sgj@tanrun.com
killerliu 2003-06-25
  • 打赏
  • 举报
回复
to :huhe(胡呵)
能给份代码研究一下吗?

blueboy0991@sina.com

甚为关注!!
rosysun 2003-06-25
  • 打赏
  • 举报
回复
给我一份代码学习学习,我的邮箱:rosysun@163.net
加载更多回复(36)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧