Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 到node.js服务器的PHP websocket连接_Javascript_Php_Node.js_Websocket - Fatal编程技术网

Javascript 到node.js服务器的PHP websocket连接

Javascript 到node.js服务器的PHP websocket连接,javascript,php,node.js,websocket,Javascript,Php,Node.js,Websocket,我有简单的node.js websocket服务器: var fs = require('fs') var ws = require('../../') var options = { secure: false, } var Server = ws.createServer(options, function(conn){ conn.on("text", function (str) { broadcast(str); //conn.send

我有简单的node.js websocket服务器:

var fs = require('fs')
var ws = require('../../')

var options = {
    secure: false,
}

var Server = ws.createServer(options, function(conn){
    conn.on("text", function (str) {
        broadcast(str);
        //conn.sendText(str.toUpperCase() + "!!!")
        console.log('connected');
        console.log(str);
        //console.log(Server.connections);
    })
}).listen(8001, "127.0.0.1");

function broadcast(str){
    Server.connections.forEach(function (connection) {
        connection.sendText(str)
    })
}
这适用于JS客户端,但不适用于PHP客户端,例如:

function MaskMessage($text)
{
    $b1 = 0x80 | (0x1 & 0x0f);
    $length = strlen($text);

    if($length <= 125)
        $header = pack('CC', $b1, $length);
    elseif($length > 125 && $length < 65536)
        $header = pack('CCn', $b1, 126, $length);
    elseif($length >= 65536)
        $header = pack('CCNN', $b1, 127, $length);
    return $header.$text;
}
$host = 'localhost';
$port = 8001;

$msg = 'hey hi hello';

$msg = MaskMessage('hej hej siema');

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

// Bind the source address
$result = socket_connect($socket, $host, $port);
if(!$result)
    echo 'cannot connect '.socket_strerror(socket_last_error());
else{
    echo socket_write($socket, strval($msg), strlen($msg));

}
socket_strerror(socket_last_error());
socket_close($socket);
函数MaskMessage($text)
{
$b1=0x80 |(0x1和0x0f);
$length=strlen($text);
如果($长度125&$长度<65536)
$header=pack('CCn',$b1,126,$length);
elseif($length>=65536)
$header=pack('CCNN',$b1127,$length);
返回$header.$text;
}
$host='localhost';
$port=8001;
$msg='hey hi hello';
$msg=MaskMessage('hej-hej-siema');
$socket=socket\u create(AF\u INET、SOCK\u STREAM、SOL\u TCP);
//绑定源地址
$result=socket\u connect($socket,$host,$port);
如果(!$result)
回显“无法连接”。套接字错误(套接字上次错误());
否则{
echo socket_write($socket,strval($msg),strlen($msg));
}
socket_strerror(socket_last_error());
插座关闭($socket);

PHP创建套接字和连接,它不会返回任何错误并发送消息,但node.js服务器不会从该客户端接收任何内容。我做错了什么?此客户端与PHP websocket服务器配合使用。

我不知道
var ws=require(“../../”)
是什么,所以我无法评论您做错了什么,但我只是尝试做了同样的事情,令人惊讶的是它居然能工作

PHP
就这样!首先启动节点服务器,然后运行PHP脚本。您应该在节点端看到“received Hello World”,在PHP端看到“Write 11 bytes to socket”。

为什么不试试socket.io而不是这个呢?从ws到socket.io就像从法拉利到Schwinn……PHP是如何处理的?运行php的服务器是否接收到请求?
echo socket_write($socket,strval($msg),strlen($msg)).socket\u write失败时返回false。尝试var_dump返回值而不是回显它。socket_write返回INT(精确为15),这意味着整个消息都被发送了。最后,我决定通过Redis将数据发送到NodeJS,它可以正常工作。但谢谢你的解决方案。
<?php

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

$result = socket_connect($socket, '127.0.0.1', 1337);

if(!$result) {
    die('cannot connect '.socket_strerror(socket_last_error()).PHP_EOL);
}

$bytes = socket_write($socket, "Hello World");

echo "wrote ".number_format($bytes).' bytes to socket'.PHP_EOL;
var net = require('net');

var server = net.createServer();
var host = '127.0.0.1';
var port = 1337;

server.on('listening', function() {
    console.log('listening on '+host+':'+port);
});

server.on('connection', function(socket) {
    socket.on('data', function(buf) {
        console.log('received',buf.toString('utf8'));
    });
});

server.listen(port, host);