Написал на php сокет-сервер. Все здорово, все работает... При прямом обращении по нужным адресам.
Дальше начинается "уличная магия"... В том случае, если сервер уже запущен, когда я дергаю его ajax`ом все хорошо. Если же сервер не запущен, то я его запускаю и пробую снова чего-нибудь ему отправить. Он запускается(вижу в логах), но... и это самое странное, даже после принудительного завершения ajax-запроса(на запуск) второй(с сообщением до сервера не доходит)... тупо висит в сетевой активности, такое ощущение, что он встает в некую очередь и ждет завершения скрипта сервера, так как если сервак тормознуть, то запрос выполняется.
Помогите пожалуйста, второй день не могу понять, что происходит...
Сервер
Спойлер (Отобразить)
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- $address = $_SERVER['HTTP_HOST'];
- {
- }
- $this->log("сокет создан\n");
- {
- $this->log("socket_bind() не удался: причина: " . socket_strerror( socket_last_error( $sock ) ) . "\n");
- }
- $this->log("сокет привязан\n");
- {
- $this->log("socket_listen() не удался: причина: " . socket_strerror( socket_last_error( $sock ) ) . "\n");
- }
- $this->log("сокет слушается\n");
- $mess_flag = false;
- do
- {
- $read[ ] = $sock;
- // Set up a blocking call to socket_select
- $write = NULL;
- $except = NULL;
- if($mess_flag)
- {
- //проверяем клиентов на активность и удаляем неактивных
- foreach($this->last_messages as $key => $value)
- {
- {
- $this -> updCountUser();
- }
- }
- {
- $this -> updCountUser();
- break;
- }
- }
- //$this->log("до выбора\n");
- {
- continue;
- }
- //$this->log("после выбора\n");
- // Handle new Connections
- {
- {
- $this->log("socket_accept() не удался причина: " . socket_strerror( socket_last_error( $sock ) ) . "\n");
- break;
- }
- $this -> clients[ ] = $msgsock;
- $msg = "1\n";
- $this->log("ответили пользователю\n");
- }
- // читаем клиентов
- foreach( $this -> clients as $key => $client )
- {
- {
- {
- $this->log("socket_read() не удался причина: " . socket_strerror( socket_last_error( $client ) ) . "\n");
- break 2;
- }
- {
- continue;
- }
- $this->messages[$key]['message'] .= $buf;
- if( $buf == 'shutdown' )
- {
- $this -> updCountUser();
- break 2;
- }
- //конец сообщения
- {
- $mess_flag = true;
- $this->log("текст: {$str}\n");
- $id = $match[1];
- $this -> updCountUser();
- $this->log("сообщение от: {$id} \n");
- $this->log("клиент отсоединен\n");
- break;
- }
- }
- }
- }
- while( true );