Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.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 从websocket.onsmessage()使用websocket.send()将数据发送到服务器_Javascript_Php_Apache_Client Server - Fatal编程技术网

Javascript 从websocket.onsmessage()使用websocket.send()将数据发送到服务器

Javascript 从websocket.onsmessage()使用websocket.send()将数据发送到服务器,javascript,php,apache,client-server,Javascript,Php,Apache,Client Server,我需要从websocket.onmessage()的内部执行websocket.send(),但是似乎不起作用。或者我还遗漏了什么? 我尝试了一些console.log(),但在type==“请求现有玩家”的情况下没有执行。它执行console.log(“connect上的播放器编号为”+msg.player\u编号)正确 我不知道如何从server.php文件中登录 我使用的是XAMPP Apache端口80 index.php: websocket.onmessage = function(

我需要从
websocket.onmessage()的内部执行
websocket.send()
,但是似乎不起作用。或者我还遗漏了什么?

我尝试了一些
console.log()
,但在
type==“请求现有玩家”
的情况下没有执行。它执行
console.log(“connect上的播放器编号为”+msg.player\u编号)正确

我不知道如何从
server.php
文件中登录

我使用的是XAMPP Apache端口80

index.php:

websocket.onmessage = function(ev) {
    var msg = JSON.parse(ev.data); //PHP sends Json data
    var type = msg.type; //message type

    if(type == 'new_player')
    {       
        var image = new Image();
        image.src = 'player.jpg';
        array_of_player_images.push(image);

        if(is_self)
        {
            console.log("player number on connect is " + msg.player_number);
            is_self = false;
            this_player = new Player(msg.starting_coordinate_x, msg.starting_coordinate_y,
                                     player_width, player_height, player_speed,msg.player_number);
            array_of_players.push(this_player); 
            window.click = new point(this_player.point.x, this_player.point.y);

            var message = {
                            type: "request_for_existing_players"
                        };
            websocket.send(JSON.stringify(message));
        }
        else array_of_players.push(new Player(msg.starting_coordinate_x, msg.starting_coordinate_y,
                                   player_width, player_height, player_speed,msg.player_number));

        is_connected = true;
        $('#info').append("Connected");
    }
    else if(type = 'player_position')
    {
        console.log(msg.player_number);
        updated_player = array_of_players[msg.player_number];
        updated_player.point.x = msg.x_coordinate;
        updated_player.point.y = msg.y_coordinate;
    }
    else if(type = 'request_for_existing_players')
    {
        console.log("number of players on request is " + msg.number_of_players);
        for(var a = 0; a != (msg.number_of_players-1); ++a )
        {
            if(a != this_player.number)
            {
                array_of_players.push(new Player(-100, -100, player_width, player_height, player_speed, a));
                console.log("baf"); 
            }
        }
    }
};
server.php:

while (true) {
    //manage multiple connections
    $changed = $clients;
    //returns the socket resources in $changed array
    socket_select($changed, $null, $null, 0, 10);

    //check for new socket
    if (in_array($socket, $changed))
    {
        $socket_new = socket_accept($socket); //accept new socket
        $clients[] = $socket_new; //add socket to client array

        $starting_coordinate_x = rand(100,400);
        $starting_coordinate_y = rand(100,400);

        $header = socket_read($socket_new, 1024); //read data sent by the socket
        perform_handshaking($header, $socket_new, $host, $port); //perform websocket handshake

        socket_getpeername($socket_new, $ip); //get ip address of connected socket

        //make room for new socket
        $found_socket = array_search($socket, $changed);
        unset($changed[$found_socket]);

        $new_player = new Player();
        $new_player->player_number = $number_of_players;
        $new_player->x_coordinate = $starting_coordinate_x;
        $new_player->y_coordinate = $starting_coordinate_y;

        $array_of_players[] = $new_player;

        $number_of_players++;

        $response_text = mask(json_encode(array('type'=>'new_player','starting_coordinate_x'=>$starting_coordinate_x,
                              'starting_coordinate_y'=>$starting_coordinate_y, 'player_number'=>($number_of_players-1))));
        send_message($response_text); //send data
    }

    //loop through all connected sockets
    foreach ($changed as $changed_socket) 
    {           
        //check for any incomming data
        while(socket_recv($changed_socket, $buf, 1024, 0) >= 1)
        {
            $received_text = unmask($buf); //unmask data
            $tst_msg = json_decode($received_text); //json decode 

            if($tst_msg->type === 'player_position')
            {
                $x_coordinate = $tst_msg->x_coordinate;
                $y_coordinate = $tst_msg->y_coordinate;
                $player_number = $tst_msg->player_number;

                //prepare data to be sent to client
                $response_text = mask(json_encode(array('type'=>'player_position', 'player_number'=>$player_number,
                'x_coordinate'=>$x_coordinate, 'y_coordinate'=>$y_coordinate)));
                send_message($response_text); //send data
            }
            else if($tst_msg->type === 'request_for_existing_players')
            {
                //prepare data to be sent to client
                $response_text = mask(json_encode(array('type'=>'request_for_existing_players','number_of_players'=>$number_of_players)));
                send_message($response_text); //send data

                for($a = 0; $a != $number_of_players; ++$a)
                {
                    //$text = mask(json_encode(array('type'=>'player_position', 'player_number'=>$a,
                                 //'x_coordinate'=>($array_of_players[$a]->x_coordinate), 'y_coordinate'=>($array_of_players[$a]->y_coordinate))));

                    //send_message($text); //send data
                }
            }

            break 2; //exits this loop
        }

        $buf = @socket_read($changed_socket, 1024, PHP_NORMAL_READ);
        if ($buf === false) { // check disconnected client
            // remove client for $clients array
            $found_socket = array_search($changed_socket, $clients);
            socket_getpeername($changed_socket, $ip);
            unset($clients[$found_socket]);

            --$number_of_players;
            //notify all users about disconnected connection
            $response = mask(json_encode(array('type'=>'system', 'message'=>$ip.' disconnected')));
            send_message($response);
        }
    }
}