网页在线聊天_html实时聊天_在内存点对点聊天
2014-07-14 09:50:27  By: dwtedx

介绍

怎么样一个聊天门户网站,提供100%的隐私?是的,在实践中是不可能的,但至少我们不能管理不存储在服务器上的用户的个人聊天信息?

这篇文章是要设计这样一个聊天系统。我现在要把所有的聊天记录都放到内存中、然后及时通信。

解决方案设计

要求:一个很简单的聊天程序,它允许多个人聊天,而不是保留在数据库中的个人信息。

解决方法:保持信息temperorily在内存中,直到它被传递给其他用户或直到一个特定的时间延迟,比如2分钟就过期。

技术细节:

在这里,一个静态列表<>是用来temperorily存储聊天记录。

浏览器将要显示的聊天信息可从该对象中异步取处,通过时间间隔的方式,例如:3秒,并获取并显示在浏览器中。

一旦消息是从对象读取这些将被立即删除。在列表Orphen消息也将在定义的时间间隔被取消,使该变量的内存消耗保持最低。


技术和示例应用程序使用的功能有:

  • HTML5 and CSS
  • jQuery - version: 1.10.2
  • ASP.NET with C# under .NET Framework 4.5
在此示例中,没有一样的WebAPI任何先进的技术被用于使funcationality可以用任何语言很容易实现。


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

若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

  • 该技术还没有评论、赶快抢沙发吧...
DD记账
top
+