Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 长轮询或WebSocket_Php_Websocket_Phpwebsocket - Fatal编程技术网

Php 长轮询或WebSocket

Php 长轮询或WebSocket,php,websocket,phpwebsocket,Php,Websocket,Phpwebsocket,我在写网络聊天,你可以在屏幕上同时与人进行几次一对一的对话。(基本上,就像个人信使一样,没有集体聊天) 我的技术选择似乎是长轮询和WebSocket,我正在尝试选择 长轮询的好处是它很容易实现,我可以返回我想要的任何数据(一个定制的JSON对象,包含更新页面所需的数据) WebSockets让我担心的是,PHP中没有本机库,因此您必须在不同的第三方库之间进行购买,而且概念似乎更复杂,包括频道和订阅以及您拥有的内容 浏览器兼容性对我来说不是问题 长轮询的性能是否比WebSocket差得多?如果没有

我在写网络聊天,你可以在屏幕上同时与人进行几次一对一的对话。(基本上,就像个人信使一样,没有集体聊天)

我的技术选择似乎是长轮询和WebSocket,我正在尝试选择

长轮询的好处是它很容易实现,我可以返回我想要的任何数据(一个定制的JSON对象,包含更新页面所需的数据)

WebSockets让我担心的是,PHP中没有本机库,因此您必须在不同的第三方库之间进行购买,而且概念似乎更复杂,包括频道和订阅以及您拥有的内容

浏览器兼容性对我来说不是问题

  • 长轮询的性能是否比WebSocket差得多?如果没有,那么我的决定很容易

  • 是否有一个真正简单的PHP Websocket服务器?还是这个概念如此简单,我可以自己写?(Mozilla在编写客户机方面有一个非常简单的方法,但在服务器上却没有)

  • 长时间投票肯定比Werbsockets穷得多
  • 不建议在PHP中使用任何websockets库,特别是用于聊天应用程序

  • 我建议改用Python、Ruby或Node.js

    假设您的长轮询方案涉及一个端点,该端点与前端托管在同一个web服务器上,这意味着应用程序的每个用户都有两个活动连接,因此您基本上可以将支持的用户数减少一半。您的websocket服务器将在不同的端口上运行,并且可以绕过您的web服务器,因此使用websocket可以节省大量连接开销

    WebSocket节省开销的另一个地方是,一旦建立了连接,就不需要不断的请求和响应。僵尸websocket连接在带宽和CPU方面基本上都是免费的


    最后,我不认为长轮询更容易实现。由于websocket的设计完全符合您的需要,我认为利用现有的websocket包实际上可以为您节省一些代码行。如果您想使用PHP,我会看看(功能丰富的)或(lite)。

    nginx支持web套接字。安装该软件并使用它将数据传递到php脚本?另一种选择是Node.js,它很容易运行并用JSON数据回复。看到您在谈论JSON,我假设您对javascript非常熟悉,可以有效地使用Node。至于用PHP编写的实际服务器-这太麻烦了,相信我。@N.B:我已经在使用nginx了。那么使用nginxwebsocket支持就不需要套接字服务器了?我只是使用nginx配置将数据传递到正确的位置?如果是这样的话,听起来太好了。我也想听听性能方面的问题。为什么不使用现有服务器,只编写前端呢?@forthrin从他们在nginx网站上写的内容来看,它支持该协议,因此它是一个web套接字服务器。我还没试过。另一方面,您可以用PHP编写自己的服务器。它只是一个简单的套接字,监听一个必须通过挑战的端口。PHPWebsocket拥有所有功能,您可以将其用作底座并进行调整。还有Node.js,如果你精通js,那么使用websockets就很容易了。你看,服务器库可以是任何语言,但我自己的服务器代码与数据库对话是PHP,我更喜欢这种方式(尽管这不是绝对必须的)。Node是不可能的,但我对Ruby有相当的了解。蟒蛇我还没来得及学。但我想你还是没开始。。我更喜欢Node.js,因为它的性能和简单性。不过,如果你决定使用它,我可以帮你。如果您想要Ruby,那么我建议您使用它,如果您坚持使用PHP,这里有一个相当简单的WebSocket,您可以详细说明为什么不建议在WebSocket和您提到的语言中使用PHP吗?你从来没有写过这是你的个人观点,所以我假设你一定有一些事实来支持你的说法?WebSocket“还不流行”,我曾尝试将WebSocket与python、PHP和Node.Js结合使用,从统计上看,在我的不同情况下(Android上的聊天应用程序、用户分析和推送通知),WebSocket的性能最好,我不知道这仍然算是个人意见,但您可以检查一下,好的,这是Apache背后的PHP针对单线程事件循环服务器进行的测试。这就像拿我的老鼠和一瓶啤酒相比。我仍然看不到任何正确的事实。例如,正确的测试应该是使用LibEV的Mongrel2后面的Node与PHP,这样我们就可以稍微公平一些。我可以为您提供在这种设置中让节点崩溃的结果。但是,我仍然想知道,一种具有套接字功能的语言比另一种具有相同套接字功能的语言差的事实是什么。我尝试了phpwebsocket,但server.php没有收到“Sec-WebSocket-Key1”和“Sec-WebSocket-Key2”。你知道我怎么解决这个问题吗?