Сокети: сервер на php
Відео: php web: Сокети, урок 9!
У попередній статті я розповідав про сокети на PHP. І сказав, що необхідно написати сервер, що приймає запити і віддає відповіді. І клієнта, що посилає запити до сервера. У цій статті ми розберемо код для класичного сервера, що приймає число, який підносить його в квадрат і повертає результат клієнтові.
відразу наводжу код сервера на PHP з докладними коментарями:
lt ;?php
header(`Content-Type: text / plain-`) -// Ми будемо виводити простий текст
set_time_limit(0) -// Скрипт повинен працювати постійно
ob_implicit_flush() -// Все echo повинні відразу ж відправлятися клієнту
$ address =`Localhost`-// Адреса роботи сервера
$ port =1985-// Порт роботи сервера (краще який-небудь редкоіспользуемий)
if(($ sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP))lt;0){
// AF_INET - сімейство протоколів
// SOCK_STREAM - тип сокета
// SOL_TCP - протокол
echo "Помилка створення сокета"-
}
else{
echo "Сокет створений n"-
}
// Зв`язуємо дескриптор сокета з вказаною адресою і портом
if(($ ret = socket_bind($ sock, $ address, $ port))lt;0){
echo "Помилка зв`язку сокета з адресою і портом"-
}
else{
echo "Сокет успішно пов`язаний з адресою і портом n"-
}
// Починаємо прослуховування сокета (максимум 5 одночасних з`єднань)
if(($ ret = socket_listen($ sock,5))lt;0){
echo "Помилка при спробі прослуховування сокета"-
}
else{
echo "Чекаємо підключення клієнта n"-
}
do{
// Приймаємо з`єднання з сокетом
if(($ msgsock = socket_accept($ sock))lt;0){
echo "Помилка при старті з`єднань з сокетом"-
}else{
echo "Сокет готовий до прийому повідомлень n"-
}
$ msg ="Hello!"-// Повідомлення клієнту
echo "Повідомлення від сервера: $ msg"-
socket_write($ msgsock, $ msg, strlen($ msg)) -// Запис в сокет
// Нескінченний цикл очікування клієнтів
do{
echo `Повідомлення від клієнта:`-
if(false===($ buf = socket_read($ msgsock,1024))){
echo "Помилка при читанні повідомлення від клієнта"- }
else{
echo $ buf." N"-// Повідомлення від клієнта
}
// Якщо клієнт передав exit, то відключаємо з`єднання
if($ buf ==`Exit`){
socket_close($ msgsock) -
break2-
}
if(!is_numeric($ buf)) echo "Повідомлення від сервера: передано НЕ число n"-
else{
$ buf = $ buf * $ buf-
echo "Повідомлення від сервера: ($ buf) n"-
}
socket_write($ msgsock, $ buf, strlen($ buf)) -
}while(true) -
}while(true) -
// Зупиняємо роботу з сокетом
if(isset($ sock)){
socket_close($ sock) -
echo "Сокет успішно закритий"-
}
?gt;
Даний код я постарався ретельно прокоментувати, тому, сподіваюся, Вам в ньому все зрозуміло. Головне зрозуміти наступне: сервер - це безперервно виконується скрипт, який просто чекає підключення клієнтів. Потім приймає запит і на підставі цього запиту, який повертає клієнту відповідь. Це найголовніше, що Вам необхідно зрозуміти.
Відео: Клієнт-сервер на сокетах!
А в наступній статті ми з Вами напишемо клієнта на PHP, який і буде підключатися до даного сервера і відправляти різні запити.
- Коди помилки http веб-сервера. Розшифровка кодів
- Як дізнатися http-заголовки сервера через curl
- Nodejs. Клієнти і сервери.
- Як зробити моніторинг сервера
- Nodejs. Як створити сервер.
- Що таке сокет в php
- Що таке long-polling, websockets, sse і comet
- Що таке реплікація в mysql?
- Як дізнатися реальний ip-адреса відвідувача
- Як налаштувати https-з`єднання?
- Що таке html5 websockets?
- Відправка асинхронних запитів на jquery.
- Функції для роботи з dns
- Відправка post-запитів через jаvascript
- Відправка cookie через curl
- Відправка get-запитів в curl
- Can not modify header information - headers already sent
- Математичні функції в php
- Установка curl на denwer
- Whois і php
- Сокети: клієнт на php