powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (Tcp-server)Вопрос по реализации
9 сообщений из 9, страница 1 из 1
(Tcp-server)Вопрос по реализации
    #38175170
geonew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день коллеги, не знал куда поместить этот вопрос, но по логике: "Кто работает со скриптами, чаще всего работает с web-серверами", запихнул сюда.

Дано:
Описан протокол взаимодействия с веб сервером. Основан на TCP (на транспортном уровне OSI).
Парсятся бинарные данные запроса, ответ также в виде бинарных пакетов (фиксированного размера).
Нужно работать с сокетами на низком уровне.

Особые условия
Коннекты (открытые сокеты) нужно держать очень долго (например час). Соединение может рваться, но при восстановлении, и получении очередного байта подтверждения - продолжать передавать оставшиеся пакеты.

Нужно реализовать TCP сервер.
В web-программировании не новичок совсем, но с подобными задачами еще не сталкивался.

Мои идеи:
1. Использование Nginx + tcp_proxy_module https://github.com/yaoweibin/nginx_tcp_proxy_module , HAProxy и Php workers
Тут Nginx или HAProxy должен держать открытые сокеты и передавать пакеты. Тут вопрос в размере передаваемых блоков и коде байта подтверждения (не уверен, что это можно нативно настроить, но буду очень рад, если вы мне подскажите как)
2. Написание собственного асинхронного не блокирующего tcp-сервера. Тут вариантов много - node.js, С++ и даже Php c libevent-библиотекой. Бизнес-логику выносим в отдельный демон на php.

P.s. Я не прошу полного ответа, просто возможно вы меня натолкнете на верное(и главное стабильное) архитектурное решение. К чему стоит еще присмотреться?
...
Рейтинг: 0 / 0
(Tcp-server)Вопрос по реализации
    #38175316
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
несильно понятно в чес собственно вопрос.

авторКоннекты (открытые сокеты) нужно держать очень долго (например час).
если дохрена соединений то кроме nginx альтернатив я вопщем то и не знаю.

на чем бизнес логику писать - личное дело каждого. если не сильно критична скорость работы то лучше на каком нибудь скриптовом языке.
...
Рейтинг: 0 / 0
(Tcp-server)Вопрос по реализации
    #38175329
geonew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrow,
Вопрос в архитектуре сервера. Как ее грамотнее построить. Просто возможно кто-то поделится своим опытом/знаниями. Не хочу по недостатку опыта наломать дров.
с nginx-отлично, для http протокола. Но тут свой протокол.
авторТут вопрос в размере передаваемых блоков и коде байта подтверждения (не уверен, что это можно нативно настроить, но буду очень рад, если вы мне подскажите как)


Пример - клиент запрашивает данные, сервер передает запрос вокеру. И тут самое интересное -
1. Клиент запросил данные
2. Сервер передает запрос вокеру. Вокер отдал серверу нужные бинарные данные.
3. Ответ сервера - первый пакет - размер последующих передаваемых данных.
4. Далее данные идут блоками фиксированного размера.

После обработки каждого блока клиент возвращает байт подтверждения. Этот процесс может быть очень долгим и сопровождаться задержками. Все это должен делать не блокирующий сервер. Так вот, я не уверен, что nginx возможно так настроить.
...
Рейтинг: 0 / 0
(Tcp-server)Вопрос по реализации
    #38175387
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
geonew,

погуглите про node.js
...
Рейтинг: 0 / 0
(Tcp-server)Вопрос по реализации
    #38175565
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
geonew, а при чем тут РНР и при чем тут Nginx (который в первую очередь http сервер)? Если есть вариант С++, можно его использовать - для работы с сокетами на низком уровне вполне подходит.
А действительно необходимо использование асинхронного не блокирующего tcp-сервера? Если одновременно подключеных клиентов до нескольких сотен, можно спокойно запустить по потоку на каждого и не париться. Конечно если надо обслуживать тысячи одновременных коннектов, тогда да, надо делать асинхронный сервер.
...
Рейтинг: 0 / 0
(Tcp-server)Вопрос по реализации
    #38175626
geonew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
?geonew, а при чем тут РНР и при чем тут Nginx (который в первую очередь http сервер)? Если есть вариант С++, можно его использовать - для работы с сокетами на низком уровне вполне подходит.
А действительно необходимо использование асинхронного не блокирующего tcp-сервера? Если одновременно подключеных клиентов до нескольких сотен, можно спокойно запустить по потоку на каждого и не париться. Конечно если надо обслуживать тысячи одновременных коннектов, тогда да, надо делать асинхронный сервер.

Да, тысячи. Я писал - Nginx + tcp_proxy_module. Не работал с этим модулем, но пишут что может на низком уровне работать. А почему не Php? Я изолирую бизнес-логику и сервер. Вот бизнес логика как рез будет на Php. Я в чем то не прав?
...
Рейтинг: 0 / 0
(Tcp-server)Вопрос по реализации
    #38175764
geonew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
geonew Не работал с этим модулем, но пишут что может на низком уровне работать.
Сорри. Умеет работь
...
Рейтинг: 0 / 0
(Tcp-server)Вопрос по реализации
    #38175787
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
geonew, proxy позволяет прокидывать входящие соединения на свой сервер, который все равно нужен. Вы его на РНР собрались писать?
...
Рейтинг: 0 / 0
(Tcp-server)Вопрос по реализации
    #38175994
geonew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
?geonew, proxy позволяет прокидывать входящие соединения на свой сервер, который все равно нужен. Вы его на РНР собрались писать?

Я знаю. У nginx есть perl_modules через которые можно (но нужно ли..) сделать логику. Я думаю на чем писать. Люди и на php с libevent пишут. На чем-для меня пока открытый вопрос.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (Tcp-server)Вопрос по реализации
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]