欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  技术分享

网页在线聊天_html实时聊天_在内存点对点聊天

程序员文章站 2022-03-01 16:19:38
...

介绍

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

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

解决方案设计

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

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

技术细节:

网页在线聊天_html实时聊天_在内存点对点聊天

在这里,一个静态列表<>是用来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