PHP套接字是否可以用于基于PHP jQuery的聊天?

时间:2010-07-16 17:15:14

标签: php jquery sockets

我正在为drupal开发一个聊天模块。我打算为聊天消息处理提供多个后端。我最初开始使用AJAX,现在已经包含了长轮询技术。然后我遇到了猿(ajax推进引擎),看起来很有希望。但它需要服务器端安装ape才能使聊天模块正常工作。虽然我还将此作为聊天的后端之一,但我主要关注的是找到一种解决方案,它可以处理可接受数量的同时聊天连接而无需进行任何服务器端修改,以便人们可以轻松使用它。

我在网上冲浪并遇到了PHP Socket编程,它看起来像是一个可行的选择。

  • 如果我写一个基于php的聊天服务器,我是否能够通过仅使用jQuery(以及ActionScript)来维护一个可以双向发送数据的连接(从服务器到客户端,反之亦然)?显然我不会在客户端使用AJAX。
  • 如果我编写一个有效的基于php套接字的聊天脚本并且说我将50MB的内存用于它,那么服务器能够同时处理多少个连接呢?
  • 共享主机上的人是否可以运行基于php的服务器端代码,因为他们没有shell访问权限,就像我们可以选择运行cron一样?
  • 我也读过某处php不是多线程语言所以你根本不应该使用socket。这是真的吗?
  • 我是否可以使用其他方法,并且在不进行任何服务器端修改的情况下将比这更有效?

5 个答案:

答案 0 :(得分:2)

您应该考虑的事项:每个新连接都会阻止PHP进程。因此,如果您建立到某个地方的套接字连接并让它长时间打开,PHP进程将被阻止,它无法接受另一个连接。因此,如果您有50个PHP进程,则可以同时建立50个连接。

这就是为什么我个人更喜欢将Node.JS用于聊天等彗星应用......

答案 1 :(得分:1)

PHP套接字是否可以用于基于PHP jQuery的聊天? - 不:)

鉴于您对共享主机的约束以及大约50mb的RAM,我建议PHP也不是一个选项。

实际上,HTTP并不是这种事情的理想选择,HTTP是基于无状态请求/响应的协议,您需要的是一个有状态的持久协议,如XMPP。

你可以使用网络技术'破解'它,因为你已经完成了长轮询和ajax,这在技术上是通过HTTP完成它的唯一方法,所有其他HTTP聊天变种总是连续定时轮询或长轮询,这是使用客户端服务器http设置的唯一方法。

您可以通过使用诸如node.js之类的技术以“更轻松”的方式执行此操作(请参阅node.js聊天演示),这在资源服务器端更轻松,但会破坏您的共享主机要求。

或者,您可以使用为该作业制作的技术人员,即在后端使用XMPP / Jabber服务器,在前端使用基于flash / flex的XMPP客户端 - 这可以轻松支持每个后端服务器5000多个连接,但再次被共享主机要求杀死。

长期,长期,长期,答案网络架构的答案是在所有设备上都有HTTP服务器,缓存和客户端,这将使每个设备成为P2P网络中的节点,而我们所有人都可以做任何事情,但这是一个还有很长的路要走:))

希望有所帮助!

答案 2 :(得分:0)

查看本教程.....这有助于您使用jquery创建基于Web的聊天应用程序http://net.tutsplus.com/tutorials/javascript-ajax/how-to-create-a-simple-web-based-chat-application/

你可以拥有自己的源代码,并尝试自己学习......

答案 3 :(得分:0)

PHP完全不适合这类问题。您可以编写一个使用pctnl函数的守护进程在每个连接上分叉一个新进程(最多到一些已配置的#eactive进程),但是它会因为你为每个连接分配一个新进程而咀嚼内存。鉴于你的要求,我会看看其他地方。

你似乎想要在共享的网络托管上托管这些东西,虽然我可以理解为什么,你至少应该认识到你并没有真正托管一个网络应用程序,你正在托管一个聊天应用程序(可能有一个基于Web的UI)。

答案 4 :(得分:0)

我认为它可以工作,使用php,jQuery和服务器上的一些SQL,以及一些沉重的捏造

我会使用Ajax,为什么不呢?然后你跳过插座?