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

som*_*lse 2 php

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

Alf*_*red 5

你的问题?

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

使用PHP进行套接字编程

您需要学习使用PHP进行Socket编程.您可以从学习本教程开始.这有解决了整个问题,因为PHP没有非阻塞IO,正确的线程模型.我建议你把它用于有趣的小项目.

使用PHP的非阻塞IO

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

使用PHP进行长轮询(阻塞IO)

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

下载

下面我介绍两种不能扩展的解决方案(原型).一种解决方案使用Redis pubsub.为此,您需要安装(编译)redis.为此你需要一个POSIX OS,虽然有些人把它移植到Windows.您还可以使用免费的redistogo.com实例.Redis解决方案是首选解决方案.我把所有东西放在一个存档中,你可以从这里下载.

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

要求

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

如何使用

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

  1. 点浏览器http://localhost/6646733/redis?me=somebodyelse&to=alfred就应该更换redispipe尝试命名管道时.
  2. 将浏览器B指向http://localhost/6646733/redis?me=alfred&to=somebodyelse
  3. 在浏览器 键入消息到textarea的,其将被发送到浏览器.
  4. 在浏览器B中,阅读刚刚从浏览器A发送的消息

解决方案不使用PHP

以下解决方案可扩展.

推杆(托管)

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

Socket.io(开源)

我真的很喜欢socket.io,但是当然还有许多其他解决方案,比如龙卷风.您可以使用Redis在PHP和其他解决方案(socket.io)之间进行有效通信.