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);
}
}
}