如何解决PHP websocket 服务器在超过 50~60 个用户时停止
我的聊天室有一个简单的 PHP web socket,它适用于低用户,小于 50,但没有 cpu 使用,没有使用内存,但是当用户越来越多时它会停止工作..
我们在 Ubunto 上运行它:
<?PHP
define("HOST_NAME","localhost");
define("PORT","1632");
$null = NULL;
require_once("class.chathandler.PHP");
$chatHandler = new ChatHandler();
$socketResource = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_set_option($socketResource,SOL_SOCKET,SO_REUSEADDR,1);
socket_bind($socketResource,PORT);
socket_listen($socketResource);
$clientSocketArray = array($socketResource);
while (true) {
$newSocketArray = $clientSocketArray;
socket_select($newSocketArray,$null,10);
if (in_array($socketResource,$newSocketArray)) {
// continue;
$newSocket = socket_accept($socketResource);
// continue;
$clientSocketArray[] = $newSocket;
$header = socket_read($newSocket,1024);
$chatHandler->doHandshake($header,$newSocket,HOST_NAME,PORT);
socket_getpeername($newSocket,$client_ip_address);
$connectionACK = $chatHandler->newConnectionACK($client_ip_address);
$chatHandler->send($connectionACK);
$newSocketIndex = array_search($socketResource,$newSocketArray);
unset($newSocketArray[$newSocketIndex]);
}
foreach ($newSocketArray as $newSocketArrayResource) {
while(socket_recv($newSocketArrayResource,$socketData,1024,0) >= 1){
$socketMessage = $chatHandler->unseal($socketData);
$messageObj = json_decode($socketMessage);
$chat_Box_message = $chatHandler->createChatBoxMessage($messageObj->chat_user,$messageObj->chat_message);
$chatHandler->send($chat_Box_message);
break 2;
}
$socketData = @socket_read($newSocketArrayResource,PHP_norMAL_READ);
if ($socketData === false) {
socket_getpeername($newSocketArrayResource,$client_ip_address);
$connectionACK = $chatHandler->connectiondisconnectACK($client_ip_address);
$chatHandler->send($connectionACK);
$newSocketIndex = array_search($newSocketArrayResource,$clientSocketArray);
unset($clientSocketArray[$newSocketIndex]);
}
}
}
socket_close($socketResource);
和用于连接它的简单 javascript ..
var websocket = new WebSocket("ws://" + ip + ":<?= $model->id ?>");
websocket.onopen = function (event) {
......
当我有几个免费资源时它就停止了...... :( 也许你有一个更好的、陈旧的在线聊天室解决方案.. 提前谢谢大家。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。