|
|
|
|
|
для: metaluga
(12.12.2009 в 17:05)
| | > Поэтому я рассматриваю 2-ой вариант с логическим соединением клиента-сервера с помощью сокетов.
В приведенном скрипте (о да) клиенты вынуждены стоять в очереди. Обработку клиента нужно пихать в отдельный поток после socket_accept'а | |
|
|
|
|
|
|
|
для: Trianon
(12.12.2009 в 17:19)
| | да. не браузерный.
просто жалко ресурсов на хосте.
ай лана.
пасиба.
чето я стал уже всех жалеть.
пайду у америкософ надыбаю уан-клик-хостинг-виз-пхп-сокетс.
повещу им там висяк-пхп-прослушивалку.
у них и так ресурсов девать не куда. | |
|
|
|
|
|
|
|
для: metaluga
(12.12.2009 в 17:05)
| | И кто будет к этому сокету подключаться и чем?
И как будет прокситься такой чат?
Или чат не браузерный?
Ну а про слушать порт, не вися... Вы сами всё прекрасно понимаете. | |
|
|
|
|
|
|
| Требуется написать серверную часть чата.
1 вариант - серверная часть просто обрабатывает данные пришедшие от клиента Постом и заносит их в базу данных.
Т.е. один из пользователей чето пишет и отсылает на сервер.
но отослать всем пользователям данное сообщение не получится.
Поэтому от каждого клиента потребуется каждые Х милисекунд отправлять запрос на сервер с целью получения новых сообщений.
Но этого хотелось бы избежать.
Поэтому я рассматриваю 2-ой вариант с логическим соединением клиента-сервера с помощью сокетов.
Естественно нашел скелет для данного скрипта:
<?php
error_reporting(E_ALL);
set_time_limit(0);
ob_implicit_flush();
$address="localhost";
$port=7777;
$sock=socket_create(AF_INET,SOCK_STREAM,0);
if($sock<0)
echo "socket_create() failed! reason: ".socket_strerror($sock)."\n";
$ret=socket_bind($sock,$address,$port);
if ($ret<0)
echo "socket_bind() failed! reason: ".socket_strerror($ret)."\n";
$ret=socket_listen($sock,5);
if ($ret<0)
echo "socket_listen() failed! reason: ".socket_strerror($ret)."\n";
while(true){
$msgsock=socket_accept($sock);
if ($msgsock<0){
echo "socket_accept() failed! reason: ".socket_strerror($msgsock)."\n";
break;
}
$msg="Welcome!";
socket_write($msgsock,$msg,strlen($msg));
while(true){
$buf=socket_read($msgsock,2048);
if($buf===false){
echo "socket_read() failed! reason: ".socket_strerror($ret)."\n";
break 2;
}
if(!$buf=trim($buf))
continue;
$talkback="Answer!";
socket_write($msgsock,$talkback,strlen($talkback));
}
socket_close($msgsock);
}
socket_close($sock);
?>
|
Как видим тут возникает проблема прослушивания порта.
Скрипту приходится зависнуть.
*set_time_limit(0)+while(true)
К серверу хостера конечно доступа не имею иначе набросал бы быстренько на борланде серверную часть и не парился бы.
Так все же можно ли как то слушать порт без зависания скрипта?
Неконструктивные предложения типа "инна" или "апстенку" просьба не писать. | |
|
|
|
|