Comments (5)
привет.
- вот что я нагуглил "Websockets != HTTP. It does not support POST/PUT"
а то уже начал вспоминать почему я не делал поддержки пост. Потому что пост идёт в теле, а тело уже кодируется с помощью вебсокет-протокола, а не старым способом. Короче пост и вебсокет не совместимы. можно конечно придумать какой-нибудь грязный хак, но это уже не по стандартам и черевато проблемами в будущем. - для вебсокетов используется свой формат обмена сообщениями, но для общения с внутренними скриптами, он мне показался слишком тяжёлым и чтобы ничего не придумывать нового я решил использовать переносы, как знак того, что это конец сообщения.
можно конечно делать микровебсервер как у тебя, но мне показалось что достаточно обычных tcp-сокетов, вот пример как можно с другого сервера передать сообщение на вебсокет-сервер: https://github.com/morozovsk/websocket-examples/blob/master/chat3/server/send.php - в библиотеке есть код, который отлавливает дисконнекты. видимо до него не успевает дайти очередь, это скорее всего из-за того что высокая нагрузка или обработка происходит слишком медленно. Дело в том, что по-умолчанию используется механизм socket_select, это накладывает ограничения 2к одновременных соединений, а также обработка соединений происходит неэффективно (об этом написано в документации php об этой функции).
Чтобы избавиться от ограничений и эффективно работать с соединениями необходимо уставновить расширение event, и указать это в конфиге.
Но скорее всего в вашем случае вы сами сохраняете идентификаторы соединений в отдельный массив, но не удаляете из него соединения, которые закрываются. Такие ошибки возникают чаще всего. К сожалению я никак не могу вам помочь не видя вашего кода.
from websocket.
Спасибо за ответ!
По поводу POST - вы абсолютно правы, это я не так использую localsocket. Просто у меня задача как раз связать сокеты и микровебсервис (локальный, принимает локальные http-запросы от оборудования, которые нужно прокидывать сокетами на фронтенд), я почему-то подумал что это и есть оно... Так же снимаю вопрос по поводу множественного срабатывания колбэка - не тот функционал:) Было бы идеально чтобы я мог вызывать компонент Yii и слать ответ конкретному websocket-клиенту, но из коробки это почему-то только для localsocket работает.. т.е. если вручную вызывать компонент (я о Yii, другой инстанс), у него не будет метода sendToClient($clientId, $data, $type), а будет только sendToService, либо я что-то делаю не так и в этом случае:)
А вот по поводу дисконнектов пока вопрос не понятен для меня, код в принципе стандартный - взял Handler из одного из ваших примеров, и туда напихал логики немного. После того как понял, что падает - обернул все, что написал в try..catch-и, но это не помогло. На данный момент пришлось перейти на longpolling, но хотелось бы разобраться в чем дело:) У меня 1-2 соединения на вебсокетах и 1-2rps на входящие в микровебсервис(localsocket), и все локальные, дело не в нагрузке - точно. Попробую перейти на event, отпишусь о результатах.
from websocket.
По поводу того как слать конкретному пользователю сообщение из сторонних скриптов, ещё раз оставлю ссылку на пример с реализацией https://github.com/morozovsk/websocket-examples/tree/master/chat3/server
если пример не понятен, то могу описать другими словами.
from websocket.
Наверно я не так объяснил опять - как передать сообщение локальному сокету понятно, но как передать сообщение конкретному подключенному веб-сокету напрямую, без localsocket?
Сейчас использую localsocket только для того, чтобы передавать сообщения конкретным websocket-ам :)
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.