聊天怎么样?

时间:2011-08-29 09:34:00

标签: php javascript

对于模糊的问题感到抱歉,但是我的网站正是我想要的。这是一个简单的聊天系统。您可以立即发送和接收消息。我今天花了很多时间寻找一个shoutbox方法,但我所能找到的只是人们说使用MySQL和javascript间隔来继续检查。立即使用新消息即时更新。这一切是如何运作的?

3 个答案:

答案 0 :(得分:11)

您应该阅读此wikipedia article,它会让您更好地了解该过程。

这里的主要关键词是长轮询,websockets,flash socket。

此外,这是node.js + socket.io闪耀的(其中一个地方)。

答案 1 :(得分:4)

它是一块蛋糕。您所需要的只是服务器,您可以在几分钟内编写(在C#中,不确定PHP)。服务器应该接受HTTP GET请求,例如:

GET /chat?room=someroom&me=Jerod HTTP/1.1

并保持其连接处于打开状态(只需接受TcpClient对象,然后在某些字典下将其疼痛,例如Dictionaty<string, Dictionary<string, TcpClient>> clients;,如下所示:clients["someroom"].Add("Jerod", tcpClient);并按住它,直到有数据发送回Jerod )

它应该接受POST,它保存用户试图发送给房间中其他用户的文本:

POST /chat?room=someroom&me=Sara HTTP/1.1
Content-Length: 2

Hi

当服务器获得此信息时,它知道Sara正在向房间“someroom”中的所有用户发送“Hi”。自从Jerod's,GET从未得到回答,连接仍然是开放的,所有服务器必须做的是从字典(或其他一些数据结构)获取该连接并回复:

HTTP 200 OK
Content-Length: <length>

Sara: Hi

并且,在客户端,你将有一个GET XMLHttpRequest对象(带有GET方法的AJAX)将其超时设置为0(阻止到无穷大)并且它将用于打开与服务器的连接,通过它将转发其他人发送的内容。

您还需要一个POST XMLHttpRequest,您将用它来向其他客户端发送数据。

当第一个AJAX(GET)成功时,你将它所拥有的TEXT(它是“Sara:Hi”)写出来给某个DIV,并再次发出相同的GET请求,这样服务器可以让用户知道别人什么时候在萨拉之后张贴......

当第二个AJAX(POST)成功时,你向DIV写了用户输入的用户名,用户名代替,如JS所示:document.getElementById("chat").innerHTML += uname+": "+txt;

非常简单明了。

答案 2 :(得分:1)

我建议你学习 Node.js 和 Socket.io。 Socket.io 是一个 node.js 库,它基本上允许您创建一个实时环境,您可以在其中在网页上发送即时消息。如果您已经精通 JavaScript 和 Node.js,只需花一天时间学习 Socket.io。 Socket.io 基本上只是将两个或更多人同时连接到一个网页。因此,当页面上发生任何活动时,每个连接的人都可以看到该活动。因此,当您在网页上发布消息时,所有连接的人都可以看到它。所以一旦你建立了这种类型的连接,你在网页上创建一个聊天框,然后当一个连接到页面的人提交消息时,它只是在 JavaScript 中创建一个

元素,然后使 InnerHTML

元素是聊天框中的文本。然后最后只是将该

元素附加到页面。完毕!您已成功在您的网页上创建了即时消息功能。