我試圖創建一個PHP
聊天的聊天,讓我有server.php
啓動終端上的服務器,這是聽client
連接:創建一個客戶端在PHP
<?php
function chat_leave($sock, $chat_id = 0)
{
if($chat_room_id[ $chat_id ])
{
unset($chat_room_id[ $chat_id ]);
return true;
}
socket_close($sock);
return false;
}
function client($input)
{
/*
Simple php udp socket client
*/
//Reduce errors
error_reporting(~E_WARNING);
$server = '127.0.0.1';
$port = 9999;
if(!($sock = socket_create(AF_INET, SOCK_DGRAM, 0)))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Couldn't create socket: [$errorcode] $errormsg \n");
}
//Communication loop
while(1)
{
//Send the message to the server
if(! socket_sendto($sock, $input , strlen($input) , 0 , $server , $port))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not send data: [$errorcode] $errormsg \n");
}
//Now receive reply from server and print it
if(socket_recv ($sock , $reply , 2045 , MSG_WAITALL) === FALSE)
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not receive data: [$errorcode] $errormsg \n");
}
return $reply;
}
}
/*
* chat_join
* a new user joins the chat
* @username: String
* @password: String
*
* add a new listener to the server
*
*/
function chat_join($username = "", $password = "")
{
$users = array(
"batman" => "batman123",
"robin" => "robin123",
"joe" => "joe123"
);
if($users[$username] == $password)
{
return true;
}
return false;
}
function main()
{
$chat_room_id = array();
$username = stripslashes($_POST['username']);
$password = stripslashes($_POST['password']);
$action = stripslashes($_POST['action']);
$port = intval($_POST['port']);
$domain = stripslashes($_POST['domain']);
$chat_id = intval($_POST['chat_room_id']);
if(strcmp($action, "login") == 0)
{
$status = chat_join($username, $password);
if($status)
{
$chat_room_id[] = $chat_id;
echo json_encode($status);
}
}
else if(strcmp($action, "chat") == 0)
{
$msg = stripslashes($_POST['message']);
// take the message, send through the client
$reply = client($msg);
echo json_encode($reply);
}
else if(strcmp($action, "logout") == 0)
{
}
else
{
echo json_encode(false);
}
return;
}
main();
?>
功能client()
是我從client.php
文件得到的代碼,當我在終端上執行時,它能夠發送和接收來自server.php
的消息。現在我想使用我的main.php
文件,因此一旦用戶登錄,他將向服務器發送消息,服務器將回複用戶沒有看到的消息。 當我從兩個不同的終端運行server.php
和client.php
時,我可以發送和接收消息,但是我希望使用main.php
來執行此操作,將該消息轉換爲JSON
對象併發送回html
頁面,附加到textarea
框中。 我的問題是:如何獲得client.php
收到的回覆並將其發送回html頁面? 當我執行它在終端上,我有:
Enter a message to send : hello
Reply : hello
我用AJAX
發送用戶輸入在聊天,所以我希望能夠把這一信息,並將其發送到服務器,我開始在終端上回復並轉發到網頁,並將其附加到文本框區域。 我該怎麼做到這一點?我是否應該通過main.php
作爲服務啓動client.php
?或者我應該使用client($input)
函數發送一條消息,然後返回它發送的消息? 但是,我希望client
在用戶註銷之前一直運行,因爲其他客戶端可能會連接到該聊天。我怎麼能做到這一點對我來說是模糊的。 client($input)
中的代碼與client.php
中的代碼相同。
http://stackoverflow.com/questions/2055020/php-chat-client – sdolgy
還要記住,PHP的設計不是運行時間超過一個請求。是否可以運行更長時間(前一段時間做過聊天機器人),但是如果你不是非常小心的話,你有很高的內存泄漏和崩潰風險。 其他語言可能更適合駐留應用程序。 – ToBe