网页在线聊天_html实时聊天_在内存点对点聊天
介绍
怎么样一个聊天门户网站,提供100%的隐私?是的,在实践中是不可能的,但至少我们不能管理不存储在服务器上的用户的个人聊天信息?
这篇文章是要设计这样一个聊天系统。我现在要把所有的聊天记录都放到内存中、然后及时通信。
解决方案设计
要求:一个很简单的聊天程序,它允许多个人聊天,而不是保留在数据库中的个人信息。
解决方法:保持信息temperorily在内存中,直到它被传递给其他用户或直到一个特定的时间延迟,比如2分钟就过期。
技术细节:
在这里,一个静态列表<>是用来temperorily存储聊天记录。
浏览器将要显示的聊天信息可从该对象中异步取处,通过时间间隔的方式,例如:3秒,并获取并显示在浏览器中。
一旦消息是从对象读取这些将被立即删除。在列表Orphen消息也将在定义的时间间隔被取消,使该变量的内存消耗保持最低。
技术和示例应用程序使用的功能有:
- HTML5 and CSS
- jQuery - version: 1.10.2
- ASP.NET with C# under .NET Framework 4.5
P2P聊天涉及到两个人之间的聊天。让我打电话给他们或者陌生人。
源代码
下面是写在jQuery中的PUSH和PULL聊天消息处理程序。
$(function () {
$("#t").focus();
$("#s").click(function () { // PUSH
if ($("#t").val().trim() != "") {
u1 = $("#u1").val();
u2 = $("#u2").val();
$.ajax({
url: "e.aspx",
type: "POST",
data: { c: "p", u1: u1, u2: u2, t: escape($("#t").val()) }
});
}
$("#t").val("").focus();
});
});
// PULL - check server to see if any new messages available
function pull() {
u1 = $("#u1").val();
u2 = $("#u2").val();
if (u1.trim() == "" || u2.trim() == "") return;
$.ajax({
url: "e.aspx",
type: "POST",
data: { c: "g", u1: u1, u2:u2 }
})
.done(function (d) {
$.each($.parseJSON(d), function (k, v) {
var cls = "cu";
var me = v.wu;
if (v.wu == u1) {
cls = "cu1";
}
$("#c").html($("#c").html() + " "
+ me + ": " + v.msg + " ");
$("#c").scrollTop(1000000);
});
});
}
然后, pull() i通过设置时间间隔:
setInterval(pull, 1000);服务器端代码
下面的代码显示了如何处理来自浏览器的触发Pull和Push命令。
首先,聊天消息记录的对象:
public class REC { // your nick public string user1 { get; set; } // stranger´s nick public string user2 { get; set; } // chat message public string msg { get; set; } // prointer to which user´s message public string wu { get; set; } // datetime details of message for //the use of removing orphen messages public DateTime dt { get; set; } }下面是我们在内存中的存储对象的声明:
public static Listdata;接下来是PUSH和PULL处理程序。
string ret = null; u1 = Request["u1"].ToString().ToLower(); u2 = Request["u2"].ToString().ToLower(); switch (Request["c"]) { case "p": // PUSH var t = Uri.UnescapeDataString(Request["t"].ToString()); DateTime dt = DateTime.UtcNow; data.Add(new REC(u1, u2, t, u1, dt)); data.Add(new REC(u2, u1, t, u1, dt)); ret = "1"; break; case "g": // PULL var z = data.Where(x => (x.user1.Contains(u1))); ret = new JavaScriptSerializer().Serialize(z); data.RemoveAll(x => (x.user1.Contains(u1))); // remove orphen messages after 2 mins data.RemoveAll(x => (DateTime.UtcNow - x.dt).TotalMinutes > 2); break; } Response.Write(ret);
PUSH:传入的聊天信息数据。你可以看到,两个记录插入。
PULL:获取特定用户的聊天信息。 Instatly,它检索之后从数据对象中删除聊天记录。
第二REMOVEALL()的λ删除它们orphen在自然界的任何消息。
由于网络问题或浏览器关闭,有可能是未使用的消息待交付。
最后给大家付上源码链接: http://dwtedx.com/download.html?bdkey=s/1o6FOenC 密码: 2hvi