客户端到php的客户端套接字

时间:2011-07-11 06:58:07

标签: php

如何让php客户端成为客户端,比如聊天方式?一个客户端连接并向其他客户端发送内容,只有他收到的不是所有客户端。

4 个答案:

答案 0 :(得分:5)

您的问题?

如果我理解正确,您需要一对一(私人)消息传递。

使用PHP进行套接字编程

您需要了解Socket programming with PHP。你可以从研究this tutorial开始。这有解决了整个问题,因为PHP没有非阻塞IO,正确的线程模型。我建议你将它用于有趣的小项目。

使用PHP

的非阻塞IO

您可以尝试使用PHP-MIO。我还没试过这个,但我猜它可能会扩展。但是再次从Apache(PHP)方面你将遇到同样的问题。但是当从双方使用它时它可以工作......

使用PHP

进行长轮询(阻塞IO)

P.S:感到无聊所以我还没有完全测试过这个;)

Download

下面我介绍两种不扩展的解决方案(原型)。一种解决方案使用Redis pubsub。为此,您需要install(compile) redis。为此你需要一个POSIX OS,虽然有些人有ported it to Windows。您还可以使用免费的redistogo.com实例。 Redis解决方案是首选解决方案。我已将所有内容放入存档中,您可以从here下载。

我还提供了一个使用命名管道的解决方案。此解决方案不要求您使用Redis,而是此方法需要访问文件系统。我相信这种方法也适用于Windows(您必须将文件名更改为Windows风格)。我想有人试试这个:)。我不能再测试了,因为很久以前我已经完全切换到POSIX OS(Ubuntu)了。

要求

至少PHP 5.3,最好是POSIX OS,redis

如何使用

要使用这两种解决方案,您需要打开两个浏览器(浏览器 A / B )。我假设您使用localhost进行开发,并且可以从http://localhost/6646733访问文件。

  1. 将浏览器 A 指向http://localhost/6646733/redis?me=somebodyelse&to=alfred,在尝试使用命名管道时,应将redis替换为pipe
  2. 将浏览器 B 指向http://localhost/6646733/redis?me=alfred&to=somebodyelse
  3. 在浏览器中 A 在textarea中输入一条消息,该消息将发送到浏览器 B
  4. 在浏览器 B 中,阅读刚刚从浏览器发送的消息 A
  5. 不使用PHP的解决方案

    以下解决方案。

    推杆(托管)

    例如,托管解决方案Pusher可以进行聊天/消息传递而不会出现缩放噩梦。 Pusher甚至慷慨提供免费计划。但请注意,廉价计划不提供SSL,因此可以拦截消息。在不使用SSL时,您不应该通过网络发送私人信息。用户/开发人员提供了一个很好的小库来使用Pusher from PHP。这种方法的问题在于你无法控制,但推动者却是,但是你再也不用担心任何细节了。

    Socket.io(开源)

    我非常喜欢socket.io,但当然还有很多其他解决方案,例如tornado。您可以使用Redis在PHP和其他解决方案(socket.io)之间进行有效通信。

答案 1 :(得分:0)

我不完全明白你要做什么,但是你可以使用某种数据库并让它存储发送给每个用户的消息,然后让你的客户端页面用AJAX类刷新聊天部分查询以更新聊天。然后,它将与新的Facebook聊天行为相似,即使是在正常聊天和邮件中发送的消息,也会存储所有消息。因此,客户可以随时邮寄和聊天,当他们在线时,它们将在聊天中显示,当您离线时,它将显示在他们的收件箱中。但这可能不是你想要做的。

答案 2 :(得分:0)

要实现最佳聊天应用程序,请使用jabber服务器并使用js / flex

编写客户端

http://en.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol

答案 3 :(得分:0)

如果它不像聊天但你想在没有服务器的情况下发送消息,那么你需要两个客户端都是服务器。服务器将侦听端口以进行连接。编写一个守护进程,每次客户端连接时都会生成一个新线程。在此线程中,您可以处理消息传递。

客户端A打开与服务器(客户端B)的连接,他们可以相互通信。或者您让客户端A成为服务器并让客户端B连接。