我尝试使用基本的cURL从PHP(CLI)向Node.js / Sockets.IO应用程序发送GET或POST请求。这是我到目前为止,我可以看到响应进入node.js(从cli),但不能得到任何更远。目前我只想将参数发送到控制台。 (我可以稍后再详述)
任何帮助都会很棒!
(仅供参考:我确实看过这个,Socket.io from php source,但需要更多的帮助。确切的代码会很棒)
PHP
$qry_str = "?msg_from_php=This_is_a_test123&y=20";
$ServerAddress = 'http://10.1.1.69/socket.io/1/websocket/TICWI50sbew59XRE-O';
$ServerPort = '4000';
$TimeOut = 20;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $ServerAddress. $qry_str);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
curl_setopt($ch, CURLOPT_PORT, $ServerPort);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $TimeOut);
curl_setopt($ch, CURLOPT_TIMEOUT, '3');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
// not sure if it should be in an array
//$data = array('msg_from_php' => 'simple message!');
//curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$content = trim(curl_exec($ch));
curl_close($ch);
echo " Sent! Content: $content \r\n";
Node.js的
var express = require('express'), http = require('http');
var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);
io.configure('production', function(){
io.enable('browser client minification');
io.enable('browser client etag');
io.enable('browser client gzip');
io.set('log level', 1);
io.set('transports', ['websocket', 'flashsocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']);
io.set("polling duration", 30);
});
server.listen(4000); // 80,443, 843, 4000, 4001
io.sockets.on('connection', function (socket) {
socket.on('msg_from_php, function (data) {
console.log(data);
});
});
答案 0 :(得分:2)
您正在尝试与socket.io服务器建立普通的HTTP连接,但socket.io不会说纯HTTP;它至少使用一个专门的握手协议,如果它使用websocket传输,它将根本不使用HTTP。 AFAIK没有socket.io客户端的PHP实现。
幸运的是,看起来您的PHP应用程序需要按照自己的条件发送到您的节点应用程序,而不是相反,所以您需要做的就是使用express来定义几条路由来实现RESTful接口;然后,您的PHP应用程序可以使用cURL POST到相应路径对应的URL。