asp.net 即时聊天

zhouganqing 2010-11-12 10:46:29
请问各位可否做过即时聊天呀,要求是在C#语言在asp.net开发的,之前研究过socket和线程想实现即时聊天可惜只能在Winform模式下运行,但在BS结构下却未能实现。之后又调查过powertalkbox,但是在嵌入程序和将数据插入到数据库的时候遇到了一点点问题,也是未能很好的实现。希望大家能够帮忙想点办法,提点意见呀,谢谢了。解决马上给分
...全文
656 28 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
kakadujiao 2010-12-28
  • 打赏
  • 举报
回复
楼主做出来分享下
jialine0426 2010-11-30
  • 打赏
  • 举报
回复
给个解决思路吧:
2006年的时候,我用Flash做Web界面的聊天客户端,用Windows Server做中转,当与服务端建立连接关系后,得到客户端的IP和开放到端口,Server通知.NET程序端开放端口,由Flash通过Socket连过去。Flash使用XMLSocket这个对象做的
  • 打赏
  • 举报
回复
“研究”,不是该研究的时候。
  • 打赏
  • 举报
回复
建议你找一个正规做过类似产品的公司。

提出有意义的问题,展现你确实在开发,才能得到有意义的答案。
hwbox 2010-11-30
  • 打赏
  • 举报
回复
建内存表用于交互,定时清除过期数据
老程序再次出动

public class TheGlobalMsgs
{
const long timerDelay = 60000;//定时器过期时间60秒(1分钟内的短消息保留),客户端最长每30秒一取!

Timer theTimer;
public static DataTable theMsgsTable = null;
public TheGlobalMsgs()
{
theMsgsTable = new DataTable("TheMsgTable"); //| 建立表, 表名:"Msgs"
System.Data.DataColumn Column1 = new DataColumn("id", typeof(System.Int64)); //| 建立字段, 字段名:"id", 类型: int
System.Data.DataColumn Column2 = new DataColumn("msgText", typeof(System.String));
System.Data.DataColumn Column3 = new DataColumn("GetUserID", typeof(System.String));
System.Data.DataColumn Column4 = new DataColumn("SendUserID", typeof(System.String));
System.Data.DataColumn Column5 = new DataColumn("SendUserName", typeof(System.String));
System.Data.DataColumn Column6 = new DataColumn("SendTime", typeof(System.DateTime));

Column1.AutoIncrement = true; //| 设置自增ID
Column1.AutoIncrementSeed = 1; //| ID 起始值
Column1.AutoIncrementStep = 1; //| 递增量

theMsgsTable.Columns.Add(Column1);
theMsgsTable.Columns.Add(Column2);
theMsgsTable.Columns.Add(Column3);
theMsgsTable.Columns.Add(Column4);
theMsgsTable.Columns.Add(Column5);
theMsgsTable.Columns.Add(Column6);
//我想在内存中动态创建一个表
// 找到这么一段代码 请高手如何创建一个完整的表 包括创建字段,设置主键,设置字段类型 等等
theMsgsTable.PrimaryKey = new System.Data.DataColumn[] { Column1 };

TimerCallback OnTimerTick = new TimerCallback(TimerTick);
theTimer = new Timer(OnTimerTick, null, timerDelay, timerDelay);

}

/// <summary>
/// 定时期过期方法 删除表中的两分钟以前的过期值
/// </summary>
/// <param name="state"></param>
private void TimerTick(object state)
{
DataView theDV = new DataView(theMsgsTable);
theDV.AllowDelete = true;
theDV.AllowEdit = true;
theDV.AllowNew = true;
theDV.RowFilter = "SendTime < #" + DateTime.Now.AddMilliseconds(-120000).ToLongTimeString() + "#" ;
for (int i = 0; i < theDV.Count; i++)
{
theDV.Delete(i);
}
theMsgsTable.AcceptChanges();
}

/// <summary>
/// 向内存表中添加一个消息
/// </summary>
/// <param name="inp_SendUser_ID"></param>
/// <param name="inp_SendUser_Name"></param>
/// <param name="inp_GetUser_ID"></param>
/// <param name="inp_TheMsgText"></param>
/// <returns></returns>
public bool AddMsg(string inp_SendUser_ID, string inp_SendUser_Name, string inp_GetUser_ID, string inp_TheMsgText)
{
if (inp_GetUser_ID == null || inp_GetUser_ID == "" || !DAL.DBBase.IsInt(inp_GetUser_ID) || inp_TheMsgText == null || inp_TheMsgText == "")
{
return false;
}
if (inp_SendUser_ID != null && inp_SendUser_ID != "")
{
if (!DAL.DBBase.IsInt(inp_SendUser_ID))
{
return false;
}
}

System.Data.DataRow theRow = theMsgsTable.NewRow(); //新行;
//theRow[id] = ""; 行ID可以自加得到!!!!
theRow["msgText"] = inp_TheMsgText;
theRow["GetUserID"] = inp_GetUser_ID;
theRow["SendUserID"] = inp_SendUser_ID;
theRow["SendUserName"] = inp_SendUser_Name;
theRow["SendTime"] = System.DateTime.Now;
theMsgsTable.Rows.Add(theRow); // 将该行数据添加进表
theMsgsTable.AcceptChanges();
return true;
}

/// <summary>
/// 得到发给某人的短消息
/// </summary>
/// <param name="inp_GetUser_ID">某人的ID</param>
/// <returns>DataTable</returns>
public DataTable GetSomeBodyMsgs(string inp_GetUser_ID)
{
DataTable theBackTable = null;
if (inp_GetUser_ID != null && inp_GetUser_ID != "" && DAL.DBBase.IsInt(inp_GetUser_ID))
{
DataView theDV = new DataView(theMsgsTable);
theDV.AllowDelete = true;
theDV.AllowEdit = true;
theDV.AllowNew = true;
theDV.RowFilter = "GetUserID = " + inp_GetUser_ID;
theDV.Sort = "SendTime";
theBackTable = theDV.ToTable();//从视图中取值
for (int i = 0; i < theDV.Count; i++)
{
theDV.Delete(i);
}
theMsgsTable.AcceptChanges();
}
return theBackTable;
}


}





jzywh 2010-11-30
  • 打赏
  • 举报
回复
SuperWebSocket中带有一个LiveChat的Demo程序。
http://superwebsocket.codeplex.com/
上帝代言人 2010-11-15
  • 打赏
  • 举报
回复
嗯,谢谢哦,我先看看,大家如果有更好的答案,我马上结贴给分。
itrefer 2010-11-15
  • 打赏
  • 举报
回复
zhouganqing 2010-11-15
  • 打赏
  • 举报
回复
呵呵,我再试试吧,希望大家能够再关注一下,帮忙再多多想想办法。
ASPNETCHENGXU 2010-11-15
  • 打赏
  • 举报
回复
最好的解决办法是,弄一个服务器端的程序,放在服务器端,扫描socke,然后在推送给网页
MaoJunHang 2010-11-13
  • 打赏
  • 举报
回复
PowerTalkBox.dll 网上直接下个开源的第三放空间 按照说明放入项目就可以用了
代码小天王 2010-11-13
  • 打赏
  • 举报
回复
html 5 websocket 客户端浏览器与服务端直接通信
ycproc 2010-11-12
  • 打赏
  • 举报
回复
嗯 只要不涉及到什么 视频 传输什么的
基本的即使通讯不算什么
zhouganqing 2010-11-12
  • 打赏
  • 举报
回复
对就是跟那个webQQ发信息的功能差不多就好了
cjfriends 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wdzr_826 的回复:]
ajax轮询。

http://www.codeproject.com/KB/aspnet/ASPNetChat.aspx
[/Quote]

英文的,看起来吃力,也想学学这方面的技术
lovehooho 2010-11-12
  • 打赏
  • 举报
回复
参考百度HI网页版
腾讯web版QQ

与之类似吗?
zhouganqing 2010-11-12
  • 打赏
  • 举报
回复
毕竟通过刷新而提取数据库的数据在时间和效果上都有一定的时效偏差,并且会给服务器造成过大的压力,而影响整个程序运行速度。这样不是我们编程者想看到的吧,呵呵,希望大家帮忙多出出主意哦。
zhouganqing 2010-11-12
  • 打赏
  • 举报
回复
JS我也试过,但是那些都得先通过数据库,我是想实现像socket那样,直接把数据通过某种协议传给接收者,达到一种及时聊天的效果,数据库操作只是个辅助工具,方便以后查询。
biaofanwo 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhouganqing 的回复:]
如果用ajax 刷新数据库的话,最好别是那个timer控件,因为他对服务器的影响很大,他的执行会影响很多的页面之间值的丢失。
[/Quote]

这个没必要用timer 用js 里面的setTimeout方法就好了。
加载更多回复(8)

62,242

社区成员

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

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

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

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