如何让php客户端成为客户端,比如聊天方式?一个客户端连接并向其他客户端发送内容,只有他收到的不是所有客户端。
答案 0 :(得分:5)
如果我理解正确,您需要一对一(私人)消息传递。
您需要了解Socket programming with PHP。你可以从研究this tutorial开始。这有解决了整个问题,因为PHP没有非阻塞IO,正确的线程模型。我建议你将它用于有趣的小项目。
您可以尝试使用PHP-MIO。我还没试过这个,但我猜它可能会扩展。但是再次从Apache(PHP)方面你将遇到同样的问题。但是当从双方使用它时它可以工作......
P.S:感到无聊所以我还没有完全测试过这个;)
下面我介绍两种不扩展的解决方案(原型)。一种解决方案使用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
访问文件。
http://localhost/6646733/redis?me=somebodyelse&to=alfred
,在尝试使用命名管道时,应将redis
替换为pipe
。http://localhost/6646733/redis?me=alfred&to=somebodyelse
以下解决方案。
例如,托管解决方案Pusher可以进行聊天/消息传递而不会出现缩放噩梦。 Pusher甚至慷慨提供免费计划。但请注意,廉价计划不提供SSL,因此可以拦截消息。在不使用SSL时,您不应该通过网络发送私人信息。用户/开发人员提供了一个很好的小库来使用Pusher from PHP。这种方法的问题在于你无法控制,但推动者却是,但是你再也不用担心任何细节了。
我非常喜欢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连接。