Tag: php

Node.js + Socket.io如何从PHP接收数据

我有一个小的项目,让用户上传实时数据。 由于我是一个PHP开发人员,我发现使用Node.js和Socket.io非常困难。 我所做的是,我使用PHP作为我的应用程序的主要后端。 从用户接收数据并将其保存到数据库的人员。 用户提交数据后,PHP会将数据发送到node.js应用程序,该应用程序将通过socket.io发送给所有连接的用户。 但是我怎么能这样做? 我的意思是如何node.js没有一个新的数据? 我希望PHP发送数据(通过POST)到Nodejs,然后socket.io将广播它。 我找不到任何工作的例子。 BTW,PHP发送给Node.js的数据将以JSON格式。 有人问这里: NodeJS从PHP服务器接收数据,但我不明白它是如何工作的。

通过NodeJS将对象传递给PHP

我试图通过两个键/值传递对象,我想在另一端读取它,当我连接到Apache。 我的nodejs服务器看起来像这样: var sWeather = {"url1": "something", "url2": "another"}; var oWeather = JSON.stringify(sWeather); console.log(sWeather); var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(sWeather+'\n'); }).listen(1340, '#'); console.log('Server running at http://###/'); 现在,我对nodejs真的很陌生,而且我已经尝试了很多东西,所以我不确定在发送它之前是否需要将sWeather进行string化。 我的PHP文件是这样的: <?php $responseFromNode = file_get_contents("IP address"); var_dump($responseFromRuby); 现在,由于var_dump原因,我在网页上得到了string '[object Object] “。 我试过做类似的事情 $url1 = $responseFromNode->url1 要么 $url1 = $responseFromNode['url1'] 我只想访问这两个url作为一个string,所以我可以存储它。 任何提示将不胜感激。

制作React图库的策略对search引擎友好

我写了一个React图片库或幻灯片。 我需要使search引擎可以索引替代文本,但因为我的服务器是在PHP中,React.renderToString是有限的使用。 该服务器在PHP + MySQL中。 PHP使用Smarty(一个体面的PHP模板引擎)来呈现HTML。 其余的PHP框架是我自己的。 Smarty模板有这么一个单一的线: <script> var GalleryData = {$gallery}; </script> 这是由PHP的控制器function呈现如下: return array( 'gallery' => json_encode($gallery), ); ( $gallery是MySQL查询的结果表)。 而我的.js: React.render(<Gallery gallery={GalleryData} />, $('.gallery').get(0)); 不是最优雅的设置,但考虑到我的服务器是在PHP中,似乎没有更好的方法来做到这一点(?) 我做了一个超级快速入门,在第一枪时修复了这个问题 – 我从Firebug复制了呈现的HTML,并手动将其插入到数据库中的一个新表中。 然后,我只是从PHP中呈现这个代码块,我们很高兴浏览器。 有一个复杂的是,因为React组件只在第一次渲染时插入到DOM中(据我了解),而且由于该库一次只显示一个图像幻灯片,我不得不手动点击所有幻灯片一次保存HTML代码。 但是现在,替代文本可以由CMS编辑,所以我需要自动化这个过程,或者想出一个更好的解决scheme。 在Node.js中重写服务器是不可能的。 我的第一个猜测是我需要安装Node,并编写一个脚本来创build相同的React组件。 由于input数据(包括alt文本)必须来自MySQL,我有几个select: 从注释连接到MySQL数据库,并复制查询 在PHP端创build一个只返回JSON的响应URL(把SQL查询放入一个通用函数) 在Node中获取整个页面,但是提取GalleryData将会是一团糟 然后,我必须确保所有组件都被渲染到DOM中,所以我可以通过手动调用nextSlide()方法多次编写幻灯片(less一个)来编写脚本。 最后,我将把渲染的DOM再次保存到数据库(所以Node脚本毕竟需要一个MySQL连接 – 也许第一个选项是最好的)。 对于这样一个基本要求,整个过程似乎非常复杂。 我错过了什么吗? 我对Node完全陌生,在浏览器之外构buildDOM的概念对我来说基本上是新的。 我不介意将Node引入到我的架构中,但它只是支持在前端使用React。 请注意,该网站每月大约有15,000个综合浏览量,因此不需要考虑大规模的可扩展性 – 我不使用任何页面caching,因为这种stream量并不需要。 我可能有一些需要像这样静态渲染的React组件,但是维护一个小的技术开销(例如,在Node中维护一组并行的SQL查询)不会是一个大问题。 有谁可以在这里指导我吗?

php-node Node Express无法find模块

错误是: Cannot find module 'php' Error: Cannot find module 'php' at Function.Module._resolveFilename (module.js:336:15) at Function.Module._load (module.js:278:25) at Module.require (module.js:365:17) at require (module.js:384:17) at new View (F:\Users\MichaelJacksonIsDead\publisherServer\node_modules\express\lib\view.js:50:49) at EventEmitter.app.render (F:\Users\MichaelJacksonIsDead\publisherServer\node_modules\express\lib\application.js:545:12) at ServerResponse.res.render (F:\Users\MichaelJacksonIsDead\publisherServer\node_modules\express\lib\response.js:938:7) at F:\Users\MichaelJacksonIsDead\publisherServer\routes\index.js:12:6 at Layer.handle [as handle_request] (F:\Users\MichaelJacksonIsDead\publisherServer\node_modules\express\lib\router\layer.js:82:5) at next (F:\Users\MichaelJacksonIsDead\publisherServer\node_modules\express\lib\router\route.js:110:13) 这个页面呈现为php的路线如下: router.get('/index.php', function(req, res, next) { var render = require('php-node')({bin:"F:\\xampp\php\\php.exe"}); res.render('index.php'); }); 我已经在项目级别和级别上运行了npm […]

node.js的“非阻塞”未来是否与常规网站相关?

PHP只有一个线程,这意味着它一次可以执行1个命令,而node.js具有“非阻塞”未来(事件循环),因此它可以执行asynchronousfunction。 我不明白这是如何有用的。 例如,如果用户使用POST请求执行表单注册,并且需要将该数据插入到数据库中,则Node和PHP都需要完成操作,然后才能将响应返回给用户。 如果我们想要从服务器获取数据,Node和PHP都将从数据库中查询数据,等待数据检索完成,然后将答案返回给用户。 这意味着客户需要等待。 那么“非阻塞”未来的好处是什么呢?

NodeJS crypto.createHmac SHA256无法正常工作

我目前正在试图实现我们正在使用的库的authentication部分,但是我偶然发现了一个奇怪的数据签名问题,NodeJS中crypto.createHmac的输出大约是hash_hmac的一半在PHP中,这是PHP和NodeJS之间数据的唯一部分(我们需要在这里使用NodeJS) 用于在NodeJS中创build签名的确切代码是, authorization["oauth_signature"] = crypto.createHmac('SHA256', process.env.SECRET).update(toSign).digest('base64'); 而对于PHP来说 $authorization["oauth_signature"] = base64_encode(hash_hmac("SHA256", $signatureString . $signingKey, $secret)); 然而,NodeJS版本的输出是 7LkQP+qKR1gSdPq/AgH/3No3ps7EtZXnqwjivMixvM8= 而对于PHP来说 NmQ0MWIzYmJiMjI2YzFlMDhiYzY3NzVmMWY0MzEwNDlhNDU3NDI0ZGJlMzU3NjJhYmMwYjgwYzZjMDE4NDM4OA== 其中有两倍以上的数据 是否必须为NodeJS版本使用不同的库,而不是一个版本? 我们在Microsoft Azure上托pipe我们的NodeJS后端,不知道这是否相关,但似乎至less有效。 编辑: 我发现这个问题,在PHP中的hash_hmac自动导出它的数据为hex数据,crypto.createHmac导出它的数据作为原始的二进制数据,我直接转换成base64,我需要做的是首先导出数据到hex,然后转换那base64。

LAMP和nodejs在同一台服务器上

我有一个PHP(Laravel框架)应用程序和一个nodejs应用程序。 nodejs应用程序用于将推送通知与socket.io一起发送给用户浏览器。由于PHP不是长轮询过程的更好解决scheme,因此必须将node.js应用程序包含到我的堆栈中。 我只使用nodejs来实现单个function(向来自我的页面的用户显示一些实时数据)。 我可以期望一个1000的并发连接,所以我避免使用PHP的Ajax长轮询,并使用nodejs处理长轮询与socket.io 现在我很困惑是否部署我的PHP应用程序和nodejs应用程序会导致任何问题? 我的PHP应用程序将通过内部API与nodejs应用程序进行通信。 在性能方面在LAMP堆栈上部署nodejs可以吗? 在nodejsstream量点击(长轮询)过程是否影响我的服务器,并影响我的PHP应用程序?

为什么当我在IO操作上对它们进行基准testing时,PHP会比Node.js更好呢?

我正在使用PHP和Node.js上的apache基准testing工具,分别是端口80和端口8000。 下面的节点基准testing命令,在PHP上运行testing时交换端口: ab -n 100 -c 100 http://localhost:8000/ 我在程序中所做的只是读取一个10MB的文本文件,然后将其发送回客户端。 令我惊讶的是,PHP基准testing需要大约6秒钟,而Node.js则在13秒钟之后。 这是文本文件: https://github.com/jamesward/play-load-tests/blob/master/public/10mb.txt 这是每个代码: Node.js的 var http = require("http"); var fs = require("fs"); var s = http.createServer(function(req, res) { res.writeHead(200, {"content-type": "text/plain"}); fs.readFile("./10mb.txt", "utf8", function(err, data) { res.end(data); }); }); s.listen(8000); PHP <?php echo file_get_contents("./10mb.txt"); 我在节点代码中做错了什么? 否则我很困惑,Node的主要卖点之一是OI操作速度很快。 我错过了什么?

如何将php数组存储到redis中并在nodejs中检索?

我使用redis (predis / prediscomposer php)在php中保存一些id,如下所示: $redis = new Client(); $mailJson = $redis->get('mail'); $mail = json_decode($mailJson); $no = rand(100,500); array_push($mail, $no); $redis->set('mail', json_encode($mail)); 我像这样检索这个数组: var redis = require("redis"), client = redis.createClient(); client.on('connect', function() { client.get('mail', function(err, mailIds) { console.log(mailIds); }); }); 但mailIdsvariables是string,而不是像这样的数组: [1,200,500,500,400,100,200,100] 方式可以访问mailIds项目?

Node.js和JSON

我是node.js的新手,请耐心等待。 这是我的情况: 我有一个返回JSON的URL。 我需要把这个JSON,并传递给一个JavaScript函数,返回一个自定义模板。 目前我正在使用PHP来处理来自客户端的请求。 我不确定这里最好的方法是什么。 我试过将URL作为parameter passing给.js程序。 我也试过把JSON作为parameter passing,但是根本不起作用。 我正在使用shell_exec来调用节点脚本。 我能够写简单的文本行,他们行事我期待的方式。 我知道这不是最好的办法,另一个解决scheme? 我如何传递JSON并将其parsing为一个参数? 如何从JavaScript使用JavaScript获取内容? PHP代码 $json = "{'a':'1','b':'2'}"; $test = shell_exec("node example.js ".$json); Example.js var data = String(process.argv.splice(2)); console.log(data);