我在使用Redis工作正常的PHP和Node之间 Build 了连接,但是我很乐意在没有任何外部库和服务的情况下使用套接字 .
如果不使用Redis,我不确定性能会受到多大影响,但对于更简单的项目,这对于较少的代码来说会很好 .
我在Using PHP with Socket.io中获得了this answer的大部分代码,但我不得不改变一些变量 . 但它没有按预期工作 .
我尝试使用和不使用https,因为我将使用https,但我尝试使用http创建一个更简单的示例,以使其正常工作 .
-
send.php创建并写入套接字 . 我可以确认它连接到节点,因为如果节点没有运行我会收到错误 .
-
socket.js不会在console.logs中返回任何内容 .
-
socket-https.js返回:: ffff:127.0.0.1但isn 't reading the socket.on(' data')的连接 . 我错过了什么?
我想我误解了http版本中var / require部分的内容 .
任何人都可以发现它为什么不起作用?
socket.js
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var listener = app.listen(8080, function(){
console.log('Listening on port ' + listener.address().port);
});
http.on("connection", function(socket) {
console.log("connection");
if(socket.remoteAddress == "::ffff:127.0.0.1") {
console.log("connection from " + socket.remoteAddress);
socket.on('data', function(buf) {
var js = JSON.parse(buf);
console.log("on data: " + js); // Not working
});
}
});
socket-https.js
var fs = require('fs');
var privateKey = fs.readFileSync('my-domain-com.key', 'utf8');
var certificate = fs.readFileSync('my-domain-com.crt', 'utf8');
var credentials = {key: privateKey, cert: certificate};
var app = require('express')();
var https = require('https').createServer(credentials, app);
var io = require('socket.io')(https);
https.listen(8080, function(){
console.log('Server online');
});
https.on("connection", function(socket) {
console.log("connection"); // Works!
if(socket.remoteAddress == "::ffff:127.0.0.1") {
console.log("connection from " + socket.remoteAddress); // Works!
socket.on('data', function(buf) {
var js = JSON.parse(buf);
console.log("on data: " + js); // Not working :(
});
}
});
send.php
sio_message("Message","Data");
function sio_message($message, $data) {
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$result = socket_connect($socket, '127.0.0.1', 8080);
if(!$result) {
die('cannot connect '.socket_strerror(socket_last_error()).PHP_EOL);
} else {
echo "Connected<br>";
}
$bytes = socket_write($socket, json_encode(Array("msg" => $message, "data" => $data)));
echo " $bytes bytes written";
socket_close($socket);
}
1 回答
试试这个:
PHP脚本: