Perl и работа с сокетами


Оглавление (нажмите, чтобы открыть):

Perl и работа с сокетами

Perl и работа с сокетами

Иногда возникает необходимость из программы на перле соединиться с другим сервером и передать/принять какую-нибудь информацию. Как правило, возникает необходимость работать с протоколом HTTP, но поняв основные принципы взаимодействия между двумя серверами и прочитав спецификацию интересующего протокола, можно написать программу, работающую практически через любой протокол. Далее мы рассмотрим работу с протоколом HTTP.
Первое что нам понадобится это — сокеты (sockets). Сокет — это канал, проложенный между сервером на котором запускается программа и сервером, с которым мы хотим установить соединение. Для работы с сокетами в перле есть модуль — Socket.
Для создания сокета используется функция socket. Формат ее таков:

Данная функция открывает сокет и привязывает его к указателю SOCK.
DOMAIN — это коммуникационный домен. Не нужно его путать с доменом сервера с которым мы соединяемся. В нашем случае это будет Internet домен (бывает еще Unix домен) а потому указываем: PF_INET
TYPE — это тип сокета. Мы будем использовать SOCK_STREAM — этот тип обеспечивает последовательный, надежный поток байтов. Так же существуют Datagram socket и Raw socket, но о них как-нибудь в другой раз.
PROTOCOL — протокол, по которому будет устанавливаться соединение. В нашем случае это tcp поэтому вместо PROTOCOL вставляем следующее:

Помимо tcp можно использовать udp, ip и т.д. Функция getprotobyname возвращает название протокола в более удобном для функции socket виде.
Итак создаем сокет:

Когда сокет готов, можно подключаться к конкретному серверу. Для этого нам нужен адрес сервера и порт. Предварительно, необходимо сделать следующее:

Теперь все готово и мы можем использовать функцию connect:

После соединения с сервером, мы можем передавать и принимать некоторую информацию. Рассмотрим процесс передачи и приема данных, более подробно, на примере соединения с Web-сервером и получения с него некоторого документа. Для отправки сообщения через сокет служит функция send:

Вместо 0 может быть один из перечисленных флагов:
MSG_OOB — Посылать/получать данные, характерные для сокетов типа SOCK_STREAM
MSG_DONTROUTE — Посылать данные без маршрутизации пакетов. Как правило используется диагностическими программами и процессами управляющими таблицами маршрутизации.
Для приема данных через сокет, используем стандартную операцию:

После окончания сеанса связи, необходимо закрыть сокет, при этом серверу сообщается что сеанс связи закончен. Для закрытия сокета служит функция close, которой необходимо передать дескриптор сокета.

Ну и на последок пример рабочего кода. Программа соединяется с сервером www.perl.ru и забирает от туда главную страницу.

Если вы попробуете поменять значения переменной $host, то обнаружите, что с некоторых серверов приходит сообщение об ошибке. Всему причиной HTTP протокол и настройки Web-серверов. Более подробно о HTTP читайте в статье «HTTP протокол». А пока о том как с этим бороться.
Дело в том, что в сети существует очень большое количество виртуальных серверов, т.е. серверов с разными именами, но одним IP адресом. Попробуйте например сделать Ping Любое_имя.narod.ru. Все они будут иметь один IP адрес. А поскольку наш сокет фактически соединяется с IP адресом, то мы и получаем сообщение об ошибке. Web-сервер того же narod.ru просто не знает страницы какого из виртуальных серверов показывать. Значит нужно объяснить ему это. Для этого существует переменная HOST которая указывается в заголовке запроса. Т.е.

Подставив эту строчку в наш скрипт, мы получим уже более совершенную программу. Так же, некоторые сервера в зависимости от браузера (а вы еще не ощущаете себя им?) показывают разные версии сайтов. Встречается такое крайне редко, но к этому нужно быть готовым. Используйте для них переменную USER-AGENT.

FPublisher

Web-технологии: База знаний

Работа с Сокетами в Perl: Загрузка файлов на удаленный сервер

Задача: Загрузить имеющийся файл на другой сервер через форму. Например у нас есть несколько сайтов, в базу данных которых нам надо добавить картинку-баннер со своего сервера, с описанием и своими личными данными (логин, пароль). Для этого будем использовать прямое соединение с сервером.

Задача: Загрузить имеющийся файл на другой сервер через форму. Например у нас есть несколько сайтов, в базу данных которых нам надо добавить картинку-баннер со своего сервера, с описанием и своими личными данными (логин, пароль). Для этого будем использовать прямое соединение с сервером.

Предположим Вы работаете менеджером по рекламе и вам необходимо подгружать один баннер в десяток другой баннерных систем. Чтобы не возится с каждым баннером, можно написать программу, автоматизирующую процесс подгрузки баннеров на несколько сайтов, защищенных паролем в хидден-поле(безопасность для данного примера работает при клиенте с аутентификацией через хидден-поля). Используя встроенную упаковку CGI.pm пакетов multipart/from можно напороться на то, что CGI.pm формируетй такой пакет, который может не разобрать программа, написанная, скажем на языке C. Т.е. CGI.pm формирует пакеты не совсем согласно rfc1867. Чтобы избежать этого неудобства, можно посылать картинки, используя Socket.pm. Т.е. нужно сформировать и отправить пакет в точности с rfc1867, который является стандартом для всех языков программирования. Ниже представлена программа, реализующая эту задачу:

Мастер Йода рекомендует:  Вопросы для собеседования на позицию Data Scientist в топовых компаниях

Последние поступления:


ТехЗадание на Землю

Размещена 14 марта 2020 года

Пpоект Genesis (из коpпоpативной пеpеписки)

Шпаргалка по работе с Vim

Размещена 05 декабря 2020 года

Vim довольно мощный редактор, но работа с ним не всегда наглядна.
Например если нужно отредактировать какой-то файл например при помощи crontab, без знания специфики работы с viv никак.

Ошибка: Error: Cannot find a val >Размещена 13 сентабря 2020 года

Если возникает ошибка на centos 5 вида
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. Invalid release/

Linux Optimization

Размещена 30 июля 2012 года

IO::Socket кто знает?

ОС Виндовс. Не смог найти ни одного рабочего примера. Нужно считать страничку любого сайта в интернете. Если возможно, то исходя из того, что IP сервера не знаю.

Добавлено через 17 минут
Самый похожий на правду скрипт.

16.10.2013, 21:23

обращаюсь к тем,кто знает JavaScript и Perl.
обращаюсь к тем,кто знает JavaScript и Perl. такая проблема. есть у меня две задачки.обе.

Кто знает и может подсказать с чего начать
Есть телефон! хотелось бы попробовать что-то сделать из его экранчика .Тока не в курсе с чего.

Socket. Отправка данных всем, кто знает адрес:порт сервера
Здравствуйте, уважаемые формучане, возник вопрос, а можно ли сделать такой C#-сервер, который.

Как это сделать кто знает? кто поможет?)
Задание № 8 Разработать базу данных «Пожарная охрана» Сведения: • Номер пожарного расчета.


Кто знает?
У меня есть ВЧ, когда его набираешь в ручную в Яше в поисковой строчке, то мой сайт на первом.

16.10.2013, 23:16 2 17.10.2013, 12:30 [ТС] 3 17.10.2013, 17:29 4
17.10.2013, 17:29
17.10.2013, 19:31 [ТС] 5

По момему несколько противоречит вот этому
Supporting HTTP 1.0 Requests

To be compatible with older browsers, HTTP 1.1 servers must support HTTP 1.0 requests. In particular, when a request uses HTTP 1.0 (as identified in the initial request line),

17.10.2013, 21:30 6
17.10.2013, 22:48 [ТС] 7
17.10.2013, 23:31 8
18.10.2013, 00:07 [ТС] 9

И вот так то же не проходит.

Добавлено через 13 минут
И через пробел то же не проходит

Добавлено через 14 секунд
И через пробел то же не проходит

18.10.2013, 12:45 10
18.10.2013, 17:58 [ТС] 11

Согласен у Вас абсолютно рабочий вариант. Спасибо огромное, у меня все получилось. В своих экспериментах, я не знал, что запрос должен быть обязательно «склеенный».
Теперь возник следующий вопрос, работают ли сокеты с куки, или надо генерировать самому, можно ли использовать куки от библиотеки Lwp, если соединение уже сделано через Сокеты. С куками я разобрался, в принципе можно и самому генерировать, но если есть модули, то зачем сложности?


Добавлено через 1 час 12 минут
print $sock «POST http://$url.$page. HTTP/1.1\nHost: .$url.\n.$brauser.$Accept.$Language.$qzip.$Accept_Charse.$Connection.$Content_Type.\n$Content_Length\n\n$action\n\n»;
Вот так работает на сокетах, не подскажите на LWP дать такой же запрос?
$req = POST «.

Добавлено через 6 секунд
print $sock «POST http://$url.$page. HTTP/1.1\nHost: .$url.\n.$brauser.$Accept.$Language.$qzip.$Accept_Charse.$Connection.$Content_Type.\n$Content_Length\n\n$action\n\n»;
Вот так работает на сокетах, не подскажите на LWP дать такой же запрос?
$req = POST «.

Добавлено через 1 час 16 минут
Кто раскажет как переделать под LWP?

Работа с perl сокетами

Я новичок в программировании сокетов Perl. На данный момент сервер отправляет строку, а клиент отвечает другой строкой в моей программе. Позже, если сервер отправит другую строку, клиент не сможет ее получить. Нужно ли включать какие-либо функции для передачи данных между сервером и клиентом несколько раз?

Печать $ serverdata второй раз на стороне клиента не происходит.

3 ответа

Ваш сервер начинает прослушивать какой-то порт. Он ждет, пока клиент установит соединение, accept это соединение. Он читает и записывает немного данных через клиентское соединение. А потом? Затем он просто закрывает сокет и выходит из программы.

Это не то, что вы намеревались: вы хотите, чтобы сервер начал ожидать следующего соединения. Это означает какой-то цикл: каждый раз, когда клиент подключается, мы будем общаться:

Я рекомендую вам прочитать соответствующие разделы perldoc perlipc , но имейте в виду, что он использует устаревшие лучшие практики, поэтому не копируйте напрямую.

Если вы используете для чтения сообщения с другого конца, отправитель должен завершить сообщение с помощью «\ n». Кроме того, вы можете использовать recv (. ), чтобы сообщение не буферизовалось до символа новой строки.

Просто убедитесь, что ваш клиент отправляет целую строку. Так как вы читаете с

работа с сокетами на перле. нужна помошь

есть два скрипта. 1. #!/usr/bin/perl

use strict; use IO::Socket; use IO::Select;

my $texts=<>; my $serv=new IO::Socket::INET( Proto => ‘tcp’, LocalAddr => ‘10.0.36.10:25’, Listen => 10, Reuse => 1 );

my $sel=new IO::Select();

$sel->add($serv); my $timeout = 300;


/HELO/i ) < $cli->send(«Some answer»);# Send some data > > проблема — переменная $size не определена а переменная $tmp содержит в себе данные которые пришли по сети.

Re: работа с сокетами на перле. нужна помошь

скрипт 2 use strict; use IO::Socket;

my $local = IO::Socket::INET->new( Proto => ‘tcp’, LocalAddr => ‘10.0.36.10:25’, Listen => 5, Reuse => 1 ) or die «$!»;

print «At your service. Waiting. \n»;

my $addr; $|=1; my $SP = 255; my $CRLF = «\x0D\x0A»; my $CR = «\x0D»; my $LF = «\x0A»; open FH,»>/root/mail.tmp»;

while ($addr = $local->accept() ) < print "Connected from: ", $addr->peerhost(); print » Port: «, $addr->peerport(), «\n»; my $greeting = «220 Welcome to Qmail Toaster.\r\n»; print FH $greeting; print $greeting; my $mail_from; my $rcpt_to; my $temp; my $quest; $addr->send($greeting,1024); $|=1;

while ( ) < my $ans,$quest; my $stop = 0; $ans = ""; #$addr->send($data,64); while ($stop == 0) < #$addr->send(«»,1024); $addr->recv($ans,1024); print FH $ans; print $ans; if ($ans =

/DATA/i) < $quest = "354 Start mail input; end with . \n"; $addr->send($quest,1024); print FH $quest; my $start_data = 1; while ($start_data == 1) < $addr->recv($ans,1024,0); print FH $ans; #print «Debug on:».$ans; $ans =

s/\015\012//gi; #print «Debug off:».$ans.»\n»;

if ($ans eq «.») < $start_data = 0; #print "\$start_data: ".$start_data."\n"; >else < print $ans."\n"; >> $quest = «250 Requested mail action okay, completed\n»; $addr->send($quest,1024); print FH $quest; > if ($ans =

/QUIT/i) < $quest = "See You.\n"; $addr->send($quest,1024); print FH $quest; $stop = 1; > if ($ans =

> # print $ans; > close $addr; print «Waiting next connection.\n»; > close FH; > проблема — почему то сервер в упор не видит первую строку. если пробовать телнетом то нужно нажать ентер а потом набирать команды.

очень нужна ваша помошь

Re: работа с сокетами на перле. нужна помошь

а кто форматировать будет??

Re: работа с сокетами на перле. нужна помошь

#!/usr/bin/perl -w use strict;use IO::Socket;use IO::Handle;use Socket;use Symbol;use POSIX;use Net::hostent;use Fcntl;use IO::Select; my $port=6002; my $host=»127.0.0.1″; my $PREFORK=»1″; my $MAX_CLIENTS_PER_CHILD=»1″;my %children=(); my $children=0;my $f=»/mnt/data/mnt/work/control.txt»;make_new_child() for(1 .. $PREFORK);$SIG=\&REAPER; $SIG=\&HUNTSMAN;while(1)< sleep; for(my $i=$children; $i new(SIGINT); sigprocmask(SIG_BLOCK, $sigset) or die "can't block SIGINT for fork: $!\n"; die "fork: $!" unless defined do<$p ; CHILD->autoflush(1); PARENT->autoflush(1); my $handle = IO::Socket::INET->new( Proto => ‘tcp’, PeerAddr => $host, PeerPort => $port) or die do< print "can't connect to port $port on $host: $!\n"; sleep 1; >; print «[Connected to $host:$port]\n»; die «can’t fork: $!» unless defined do <$k =>$k >new( LocalPort => 6003, Type => SOCK_STREAM, Proto => ‘tcp’, Reuse => 1, Listen => SOMAXCONN); die «making socket: $! $@» unless $server; print «go translate9\n»; while($client=$server->accept())< $client->autoflush(1); my $sad = $client -> sockname(); my ($p,$a)= sockaddr_in($sad); my $ph = inet_ntoa($a); print «[Connected from $p:$ph]\n»; my ($line, $line1); while (defined ($line = ))< print $handle $line; chomp($line1=

); print $client «$line1\n»; > # close $client; > close PARENT; close $client; > > exit; >>sub HUNTSMAN< local($SIG)=’IGNORE’; kill ‘INT’ => keys %children; exit;> sub REAPER< $SIG=\&REAPER; my $p >


Re: работа с сокетами на перле. нужна помошь

на странице «добавить коментарий» внизу, под полем ввод, есть выпадающая менюшка так вот выбери в ней «preformated text»

Справочник по Perl : Низкоуровневые функции работы с сокетами

смотрим также

Материал из Справочник Web-языков

Содержание

accept

Принимает входящее подключение через сокет; работает анологично системной команде accept(2). Возвращает упакованный адрес сокета в случае успешного подключения; иначе булево значение Ложь.

Назначает сокету, определенному параметром СОКЕТ, сетевой адрес, заданный параметром ИМЯ. Имя сокета представляет собой упакованный адрес сокета соответствующего типа. Возвращает булево значение Истина в случае успешного назначения и Ложь в противном случае.

connect

Осуществляет подключение сокета, определенного параметром СОКЕТ, к удаленному сокету, имя которого заданно параметром ИМЯ. Имя удаленного сокета представляет собой упакованный адрес сокета соответствующего типа. Возвращает булево значение Истина в случае успешного назначения и Ложь в противном случае.

getpeername

Возвращает упакованный адрес удаленного сокета, к которому подключен СОКЕТ функцией connect().

getsockname

Возвращает упакованный адрес сокета программы, который подключен функцией connect() к удаленному сокету.

getsockopt

Возвращает значение затребованной опции (параметр ИМЯ_ОПЦИИ) сокета (параметр СОКЕТ) заданного уровня (параметр УРОВЕНЬ) или неопределенное значение в случае возникновения ошибки.

listen


Включает режим приема для указанного сокета, регистрируя его как сервер. Возвращает булево значение Истина в случае успешного включения и Ложь в противном случае.

Получение заданного значением параметра ДЛИНА количества байтов через указанный сокет (параметр СОКЕТ) и сохранение их в скалярной переменной СКАЛЯР. Возвращает адреса удаленного сокета, из которого прочитанны данные, или неопределенное значение в случае возникновения ошибки при получении данных. В действительности вызывает C- функцию recvfrom(); параметр ФЛАГИ полностью соответствует аналогичному параметру указанной функции C.

Посылает строку сообщения (параметр СООБЩЕНИЕ) через сокет, заданный параметром СОКЕТ. Параметр ФЛАГИ имеет то же смусл, что и при вызове системной функции с одноименным названием. Если сокет не подключен к удаленному сокету, то параметр АДРЕС определяет адрес сокета, к которому следует подключиться. Возвращает количество переданных символов или неопределенное значение в случае возникновения ошибки.

setsockopt

Устанавливает заданную параметром ИМЯ_ОПЦИИ опцию сокета. Возвращает неопределенное значение undef в случае возникновения ошибки.

shutdown

Закрывает указанный в параметре СОКЕТ сокет на выполнение определенных операций, задаваемых параметром ДЕЙСТВИЕ: 0 — прекращает чтение, 1 — прекращает запись, 2 — прекращает использование сокета.

socket

Открывает сокет указанного типа и ассоциирует его с дескриптором сокета, заданного параметром СОКЕТ. Параметры ОБЛАСТЬ, ТИП и ПРОТОКОЛ аналогичны таким же параметрам при вызове системной функции с таким же именем. Перед использованием этой функции следует оператором use Socket; импортировать необходимые определения.

socketpair

Создает безимянную пару двунаправленных сокетов указанного типа в заданной области. Параметры ОБЛАСТЬ, ТИП и ПРОТОКОЛ аналогичны таким же параметрам привызове системной функции с таким же именем. Возвращает булево значение Истина в случае успешного создания пары сокетов.

Работа с сокетами и чтение из файла

server.pl
#!/usr/bin/perl
use IO::Socket;
$server = IO::Socket::INET->new(LocalPort => ‘4321’,Proto => «udp»)
or die «Couldn’t be a udp server on port $server_port : $@n»;
print «Working. \n»;
my $element;
my $MAX_TO_READ = 4096;
while(1) <
$server->recv($element,$MAX_TO_READ);
if($element ne «») <
open (LIST,»list») or die («Cannot open list»);
while (
) <
$server->send($_) if m/$element/;
>
close LIST;
>
else <
print «Exit\n»;
exit 1;
>
>

ну и файл — состоит из строк вида
1 first 225 680 400
2 second 234 555 332

Вот только интересное кино — как только я посылаю слово, которое заведомо в файле отсутствует происходит что-то непонятное — клиент перестает реагировать на пустой ввод — ну это мне понятно, почему. Ничего же от сервера не приходит. А вот почему не приходит — не пойму. Строки же в файле нет, логично было бы завершить и ждать следующего запроса. Пробовал переписать процесс поиска как
FIND: while (
) <
if($_ =

/$element/) <
$server->send($_);
last FIND;
>
else <
$server->send(«Sorry\n»);
last FIND;
>
>
Но это та еще чушь, потому что на запрос second оно выведет Sorry и все тут.
В перле я совсем начинающий, может кто поможет?


Работа перлов-сокетов

Я новичок в программировании сокетов Perl. На данный момент сервер отправляет строку, и клиент отвечает другой строкой в моей программе. Позже, если сервер отправляет другую строку, клиент не может ее получить. Чтобы передавать данные между сервером и клиентом несколько раз, следует ли включать какие-либо функции?

Печать второй версии serverdata на стороне клиента не происходит.

Ваш сервер начинает прослушивать какой-то порт. Он ждет, пока клиент не подключится, и accept это соединение. Он считывает и записывает несколько данных по клиентскому соединению. А потом? Затем он просто закрывает сокет и выходит из программы.

Это не то, что вы намеревались: вы хотите, чтобы сервер начал ждать следующего соединения. Это означает какой-то цикл: каждый раз, когда клиент подключается, мы будем делать наше сообщение:

Я рекомендую вам ознакомиться с соответствующими разделами perldoc perlipc , но имейте в виду, что он использует устаревшие передовые методы, поэтому ничего не копируйте напрямую.

Если вы используете для чтения сообщения с другого конца, отправитель должен завершить сообщение «\n». Кроме того, вы можете использовать recv (. ), чтобы сообщение не буферизовалось до символа новой строки.

Error establishing a database connection

This either means that the username and password information in your wp-config.php file is incorrect or we can’t contact the database server at localhost . This could mean your host’s database server is down.

  • Are you sure you have the correct username and password?
  • Are you sure that you have typed the correct hostname?
  • Are you sure that the database server is running?

If you’re unsure what these terms mean you should probably contact your host. If you still need help you can always visit the WordPress Support Forums.

Работа с WebSocket в Perl

Рассмотрены несколько подоходов при работе с технологией WebSocket из Perl

Технология WebSocket в современных браузерах уже широко поддерживается и используется во многих интернет-приложениях. В Perl поддержка WebSocket появилась еще на этапе разработки самого протокола во фреймворке Mojolicious. Затем появился модуль общего назначения Protocol::WebSocket и несколько оберток вокруг библиотек на других языках. На данный момент из-за сложности самого протокола в основном все приложения используют Protocol::WebSocket.

Что такое WebSocket?

Технология WebSocket позволяет установить двусторонний постоянный канал между клиентом и сервером используя HTTP-протокол. Вначале клиент посылает заголовок Upgrade и некоторый набор специальных заголовков, сервер отвечает своим набором заголовков и соединение устанавливается. Далее данные упаковываются в пакеты и отправляются. Кроме пакетов с данными существуют управляющие пакеты, например, для закрытия соединения.

Существует множество нюансов в зависимости от браузера, версии WebSocket, прокси-серверов, стоящих на пути запроса. Поэтому всегда стоит воспользоваться реализацией модуля Protocol::WebSocket, который обрабатывает все специальные случаи, скрывая подробности под простым интерфейсом.


Protocol::WebSocket позволяет написать как клиентскую, так и серверную часть. Рассмотрим низкоуровневую реализацию серверной части с помощью AnyEvent.

Вначале напишем html-файл. После подключения к серверу посылаем ему сообщение, а получив сообщение, выводим его в консоль.

Затем напишем серверную часть:

Все можно сильно упростить, если приложение будет запускаться в PSGI-среде. Protocol::WebSocket позволяет получить все необходимые заговки напрямую из окружения PSGI, например:

Запустив это приложение под Twiggy или Feersum или каким-либо другим PSGI-сервером на AnyEvent, получим аналогичное предыдущему примеру поведение.

Написание низкоуровневых WebSocket приложений может быть несколько утомительно, рассмотрим высокоуровный подход к написанию WebSocket-клиента. В модуле Protocol::WebSocket находится утилита wsconsole , которая позволяет очень удобно тестировать или отлаживать WebSocket-серверы. Далее представлен ее упрощенный вид:

В данном случае не нужно заботиться об обработке подключения, парсинге пакетов и прочего. Достаточно зарегистрировать нужные события и обработать их.

Сама утилита wsconsole позволяет отправлять сообщения прямо из терминала, видеть полный формат пакетов, сообщать с какой версией подключаться. Так можно проверить, насколько хорошо и полно реализован WebSocket-сервер.

Когда нет WebSocket

Не каждый браузер поддерживает WebSocket, иногда они специально отключаются, но все же приложение должно как-то работать. Есть несколько библиотек, которые имитируя интерфейс WebSocket при отсутствии последних переключаются на другие способы двусторонней передачи данных.

WebSocketJS

WebSocketJS представляет собой реализацию WebSocket с помощью технологии Flash. Исходный код библиотеки доступен на GitHub. Для полноценной работы Flash необходим запуск специального Policy-сервера отдельно или же можно воспользоваться специальным inline-сервером Fliggy, который на Flash-специфичный запрос формирует нужный ответ, а в остальном работает как Twiggy.

Socket.IO

Socket.IO в зависимости от возможностей браузера использует различные подходы для реализации двусторонней связи: Polling, Streaming, Htmlfile и другие. Socket.IO в Perl реализован PSGI-приложением PocketIO. К сожалению, недавно выпущенная версия 1.0 не поддерживается PocketIO, в связи с сильными изменениями протокола. На сегодняшний день использование Socket.IO в Perl затруднительно.

SockJS

SockJS был написан как альтернатива Socket.IO. Данная библиотека также поддерживает несколько альтернативных WebSocket-технологий. Для Perl есть реализация SockJS-perl. Преимущество SockJS — в наличии удобных утилит для тестирования в независимости от языка реализации самого протокола.

Автор советует использовать именно эту библиотеку на сегодняшний день.

Альтернативы WebSocket

Когда нет необходимости в дуплексной связи, например, для уведомления пользователя или обновления новостной ленты, можно воспользоваться технологией Server Side Events или EventSource. EventSource работает поверх HTTP и не требует значительной переработки серверной части. Реализация EventSource крайне проста и занимает несколько десятков строк, в этом можно убедиться, посмотрев на исходный код Plack-реализации EventSource.

Мастер Йода рекомендует:  Как работает инструмент Google для отказа от ссылок
Добавить комментарий