与其他任何客户端一样,建议似乎是通过HTTP接口与节点对话。您可以使用php中的cURL通过HTTP与节点对话
请参阅:http
:
//groups.google.com/group/socket_io/browse_thread/thread/74a76896d2b72ccc/216933a076ac2595?pli=1
特别是,请参阅Matt Pardee的这篇文章
我遇到了一个类似的问题,希望让用户知道已添加到错误的新注释,以及类似的通知,这些通知实际上只能从PHP有效地发送到我的Node服务器。我所做的工作(如果发送时出现乱码且未格式化,则表示歉意,如果这样做,我很乐意将代码粘贴到其他位置):首先,您需要使用PHP中的cURL。我为此类编写了一个函数,如下所示:
function notifyNode($type, $project_id, $from_user, $data) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://127.0.0.1'); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); curl_setopt($ch, CURLOPT_PORT, 8001); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2); curl_setopt($ch, CURLOPT_POST, true); $pf = array('f' => $type, 'pid' => $project_id, 'user_from' =>$from_user,
‘data’ => array());foreach($data as $k => $v) { $pf['data'][$k] = $v; } curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($pf)); curl_exec($ch); curl_close($ch);}您会注意到,由于PHP和NodeJS都在同一服务器上运行,因此我在同一服务器上发送了cURL请求,因此您的行程可能会有所不同。我将此代码设置为连接的端口是8001(这是运行Node服务器的端口,也是socket.io服务器连接的端口)。这将发送一个HTTP
POST请求,其中的post字段已编码。这些都是非常标准的cURL东西。在您的Node应用程序中,您可能会有类似以下内容:
var server = http.createServer(function(req, res) {});server.listen(8001);var io = io.listen(server, { transports: ['websocket', 'flashsocket',‘xhr-polling’] });
...好吧,我们将在http.createServer部分上进行扩展,以侦听来自本地主机(“
127.0.0.1”)的连接。然后,createServer代码变为:var server = http.createServer(function(req, res) { // Check for notices from PHP if(res.socket.remoteAddress == '127.0.0.1') { if(req.method == 'POST') { // The server is trying to send us an activity message var form = new formidable.IncomingForm(); form.parse(req, function(err, fields, files) { res.writeHead(200, [[ "Content-Type", "text/plain"] , ["Content-Length", 0] ]); res.write(''); res.end(); //sys.puts(sys.inspect({fields: fields}, true, 4)); handleServerNotice(fields); }); } }});从那里可以实现handleServerNotice函数。
function handleServerNotice(data) { ...}等等等等。我已经有一段时间没有对此进行测试了,实际上,代码块已在我的节点服务器上被注释掉了,所以我希望我粘贴到这里的内容能够起作用-
总的来说,这一概念已经得到证明,并且我认为它将为您工作。无论如何,只是想确保您知道已经过去了几个月,所以我不确定为什么要发表评论。我编写的代码进行了一些研究(例如在cURL中设置“
Expect:”标头),当它最终起作用时,我感到非常兴奋。让我知道您是否需要其他帮助。最好,
马特·帕迪
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)