[英]Client to client socket with php
如何让 php 客户端到客户端,比如聊天方式? 一个客户端连接并向另一个客户端发送某些内容,但只有他接收到并非所有客户端。
如果我理解正确,您需要一对一(私人)消息传递。
您需要使用 PHP 学习 Socket 编程。 您可以从学习本教程开始。 这到处都是缩放问题,因为 PHP 没有非阻塞 IO,正确的线程 model。 我建议你只将它用于有趣的小项目。
您可以尝试使用PHP-MIO 。 我还没有尝试过,但我想它可能会扩展。 但是从 Apache(PHP) 方面来看,你也会遇到同样的问题。 但是当从双方使用它时,它可以工作......
PS:无聊所以我没有完全测试过这个;)
下面我介绍了两个无法扩展的解决方案(原型)。 一种解决方案使用 Redis pubsub 。 为此,您需要安装(编译) redis 。 为此,您需要一个 POSIX 操作系统,尽管有些人已将其移植到 Windows 。 您还可以使用免费的redistogo.com实例。 Redis 解决方案是首选解决方案。 我已将所有内容放在一个存档中,您可以从这里下载。
我还给出了一个使用命名管道的解决方案。 此解决方案不需要您使用 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
alfred 您应该在尝试命名管道时将redis
替换为pipe
。http://localhost/6646733/redis?me=alfred&to=somebodyelse
规模以下的解决方案。
例如,使用托管解决方案Pusher ,您可以在没有扩展噩梦的情况下进行聊天/消息传递。 Pusher甚至慷慨地提供免费计划。 但请注意,便宜的计划不提供 SSL,因此可以拦截消息。 在不使用 SSL 时,您永远不应该通过网络发送私人信息。 用户/开发人员提供了一个不错的小库来使用来自 PHP 的 Pusher 。 这种方法的问题在于您无法控制,但推动者是,但是您不必担心任何细节。
我真的很喜欢socket.io ,但当然还有很多其他的解决方案,例如龙卷风。 您可以使用 Redis 在 PHP 和其他解决方案(socket.io)之间进行有效通信。
我不完全理解您要做什么,但是您可以使用某种数据库并让它存储发送给每个用户的消息,然后让您的客户端页面使用 AJAX 类型的查询刷新聊天部分更新聊天。 然后,它的行为类似于新的 Facebook 聊天,其中存储所有消息,即使是在正常聊天和邮件中发送的消息。 因此,客户可以随时互相发送邮件和聊天,当他们在线时,它会显示在他们的聊天中,当你离线时,它会显示在他们的收件箱中。 但这可能不是你想要做的。
为了实现最好的聊天应用程序,使用 jabber 服务器并使用 js/flex 编写客户端
http://en.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol
如果它不像聊天但你想在没有服务器的情况下发送消息,你需要两个客户端也是服务器。 服务器将在端口上侦听传入连接。 编写一个守护程序,每次客户端连接时都会产生一个新线程。 在此线程中,您处理消息传递。
客户端 A 打开与服务器(客户端 B)的连接,它们可以相互通信。 或者您让客户端 A 成为服务器并让客户端 B 连接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.