Comments (12)
Пожалуйста.
Сейчас моя библиотека по-умолчанию использует механизм socket_select, но также может использовать pecl/event или pecl/libevent. Для этого в конфиге нужно указать 'eventDriver' => 'event' или 'eventDriver' => 'libevent' соответственно.
pecl/event - это http://pecl.php.net/package/event, документация по этому модулю находится по ссылке, которую вы указали, т.е. http://ua2.php.net/manual/ru/book.event.php
Его поддержку я добавил, после того как убедился, что модуль libevent ведёт себя нестабильно.
Модуль pthreads я видел, но пока в планах нет добавлять его поддержку.
PHPDaemon и Ratchet действительно достаточно тяжёлые. Я не однократно рассматривал их как альтернативу моей библиотеки, но в итоге решил допиливать своё решение. Относительно недавно я сильно переработал свою библиотеку и выпустил вторую версию. Теперь использовать её ещё проще.
Пример: https://github.com/morozovsk/websocket/tree/master/samples/chat/server
from websocket.
Да, модуль Pthreads требует PHP ZTS, работать будет только как модуль Apache, это конечно лишние для демона, но даёт возможность вместо fork использовать потоки, там очень прозрачное и удобное взаимодействия общения между parent и child.
Вот немного описания
http://habrahabr.ru/post/193270/
from websocket.
Да, вместо callback думаю использовать Generator, это даст возможность не терять текущее состояния в методах.
from websocket.
Я использовал fork в основном для того чтобы обойти ограничение в 1024 соединения на один процесс и для реализации таймера. После использования модуля event необходимость в этом отпала.
from websocket.
Модуль Event асинхронный, если РНР будет обрабатывать запросы в одном процессе (потоке) в результате в самом модуле Event, будет формироваться очередь ожидания, что понизит RPS для для всех пользователей, так же все это может нагружать только одно ядро процессора, остальные ядра могут простаивать. В общем чтобы не создавать очередь последовательной синхронной обработки, асинхронных запросов, нужно параллельно их выполнять, это можно сделать или через fork или в отдельных потоках.
from websocket.
... или в отдельных процессах без использования форка , что я и сделал во второй версии своей библиотеки. форк не подходит, по-тому что отдельные процессы придётся запускать в том числе на других серверах. Т.о. мастер может быть на одном сервере, а воркеры на других.
from websocket.
Где в коде можно посмотреть реализацию создания отдельных процессов?
from websocket.
В коде нет реализации создания отдельных процессов (в том числе на других серверах). В коде есть взаимодействия запущенных процессов (в том числе на разных серверах). В конфиге мастера указываете сервисный сокет для работы с воркерами. В воркере указываете сокет для взаимодействия с мастером.
Запускаете мастер на одном сервере, запускаете воркеры на других серверах.
Пример: https://github.com/morozovsk/websocket/tree/master/samples/chat2/server
from websocket.
Не совсем понял, как можно на одном сервере запустить, несколько процессов которые которые будут слушать один порт и асинхронно отвечать на запросы.
На практике, это выйдет наверно в то что первый процесс который запустится займет порт и будет забирать все запросы.
Или я чего-то не понимаю?
from websocket.
Всё верно. Эту проблему можно решить используя проксирование через nginx.
from websocket.
Т.е запустить много воркеров, каждый на своем порту если это один сервер, и весь этот список воркеров добавить в upstream Nginx?
from websocket.
Всё верно.
from websocket.
Related Issues (20)
- Как подружить с pg_notify HOT 4
- GenericEvent считывает не весь буфер HOT 2
- список онлайн юзеров HOT 8
- Отправка изображения через вебсокет
- Работа в Safari HOT 1
- wss timeot HOT 17
- stream_select(): supplied argument is not a valid stream resource HOT 7
- Не закрывает соединение при окончании на сайте HOT 4
- Как сделать многопоточность? HOT 6
- request response order HOT 1
- Можно ли создавать комнаты? HOT 12
- PHP Client HOT 3
- Один конект по сокету на несколько вкладок HOT 2
- Потраченное время на разработку. HOT 4
- Не сбрасываются коннекты HOT 12
- "Залипает" при слишком длинном handshake-сообщение (режим event) HOT 4
- websocket lunch on remote host HOT 1
- Ошибка при остановке HOT 2
- Каково потребление памяти и cpu при нагрузке в 100 000 соединений? HOT 4
- Почему бросили? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from websocket.