我曾尝试阅读一些文章,但我对这些概念还不是很清楚.
有人愿意尝试向我解释这些技术是什么:
我每次遇到的一件事是,服务器保持连接打开并将数据推送到客户端.如何保持连接打开,客户端如何获取推送数据?(客户端如何使用数据,也许某些代码可能会有帮助?)
现在,我应该将其中哪一个用于实时应用.我一直听说很多关于websockets(有socket.io [一个node.js库]),但为什么不用PHP?
我正在构建需要使用套接字连接与另一个应用程序通信的Web应用程序.这对我来说是一个新领域,所以要确保套接字不同于websockets.看起来它们只是在概念上相似.
问起因为我最初计划使用Django作为我的项目的基础,但是在上面链接的SO帖子中,很明显webocket是不可能的(或者至少不可靠,即使像django-websockets这样的东西也是如此)使用首选的Django设置(Apache与mod_wsgi).然而,我发现其他帖子随便导入Python的套接字模块,就像获取服务器的主机名一样简单.
所以:
是否有任何教程或指南显示如何在PHP中编写一个简单的websockets服务器?我试过在谷歌上寻找它,但我找不到很多.我发现phpwebsockets但它现在已经过时,不支持最新的协议.我自己尝试更新它,但它似乎不起作用.
#!/php -q
<?php /* >php -q server.php */
error_reporting(E_ALL);
set_time_limit(0);
ob_implicit_flush();
$master = WebSocket("localhost",12345);
$sockets = array($master);
$users = array();
$debug = false;
while(true){
$changed = $sockets;
socket_select($changed,$write=NULL,$except=NULL,NULL);
foreach($changed as $socket){
if($socket==$master){
$client=socket_accept($master);
if($client<0){ console("socket_accept() failed"); continue; }
else{ connect($client); }
}
else{
$bytes = @socket_recv($socket,$buffer,2048,0);
if($bytes==0){ disconnect($socket); }
else{
$user = getuserbysocket($socket);
if(!$user->handshake){ dohandshake($user,$buffer); }
else{ process($user,$buffer); }
}
}
}
}
//---------------------------------------------------------------
function process($user,$msg){
$action = unwrap($msg);
say("< ".$action);
switch($action){
case "hello" : send($user->socket,"hello human"); break;
case …Run Code Online (Sandbox Code Playgroud) 在我自己的系统中,我有一个PHP页面显示我通过我的在线网上销售的所有商品,从最新的交易到第一个.
每当人们从我这里买东西时,我希望这个页面自动更新.
我可以AJAX每隔5秒拨打一次电话来检查我的数据库中的订单,但这似乎是1980年?还是人们这样做?
每当调用我的php newOrder()函数(让我们调用它)时,我怎样才能将通知推送到我的php页面?
我有一个使用laravel用PHP编写的Web应用程序.
现在,我必须添加实时通知系统,从服务器 - >客户端推送消息,并可以检索从客户端 - >服务器推送的消息.
由于Socket.IO向后兼容并且优雅地降级,我想将它用于WebSocket/AJAX轮询部分.
问题是Socket.IO默认使用Node.JS后端.
我有root访问服务器,并行运行(Apache和Node)没有问题或添加任何额外的东西.
问题是,如何从PHP向Node + Sockets.IO发送消息?
然后,如何将消息从Sockets.IO + Node传输到PHP?
我已经将Node + Sockets留给了浏览器部分,因为这非常简单.
我见过使用Express.js + CURL和/或POST请求的例子,但是,是不是有更低级别的方法呢?
我知道DNode + PHP,但我无法想象如何组装所有东西 - Apache,PHP,Node,Socket.IO,DNode,因此它可以无缝地协同工作.
此外,我已经转换为这个PHP WebSockets服务器实现的laravel库.但是,这个库的问题在于它为客户端使用干净的WebSockets.而且,我找不到与Socket.IO客户端一起破解它的方法.
我的html代码
var url='ws://localhost:8000/abc';
socket=new WebSocket(url);
socket.onopen=function(){
log('Success');
}
Run Code Online (Sandbox Code Playgroud)
在 php 或 node.js 中如何获取 url 路径abc?