Git Product home page Git Product logo

Comments (5)

morozovsk avatar morozovsk commented on July 19, 2024

привет.

  1. вот что я нагуглил "Websockets != HTTP. It does not support POST/PUT"
    а то уже начал вспоминать почему я не делал поддержки пост. Потому что пост идёт в теле, а тело уже кодируется с помощью вебсокет-протокола, а не старым способом. Короче пост и вебсокет не совместимы. можно конечно придумать какой-нибудь грязный хак, но это уже не по стандартам и черевато проблемами в будущем.
  2. для вебсокетов используется свой формат обмена сообщениями, но для общения с внутренними скриптами, он мне показался слишком тяжёлым и чтобы ничего не придумывать нового я решил использовать переносы, как знак того, что это конец сообщения.
    можно конечно делать микровебсервер как у тебя, но мне показалось что достаточно обычных tcp-сокетов, вот пример как можно с другого сервера передать сообщение на вебсокет-сервер: https://github.com/morozovsk/websocket-examples/blob/master/chat3/server/send.php
  3. в библиотеке есть код, который отлавливает дисконнекты. видимо до него не успевает дайти очередь, это скорее всего из-за того что высокая нагрузка или обработка происходит слишком медленно. Дело в том, что по-умолчанию используется механизм socket_select, это накладывает ограничения 2к одновременных соединений, а также обработка соединений происходит неэффективно (об этом написано в документации php об этой функции).
    Чтобы избавиться от ограничений и эффективно работать с соединениями необходимо уставновить расширение event, и указать это в конфиге.
    Но скорее всего в вашем случае вы сами сохраняете идентификаторы соединений в отдельный массив, но не удаляете из него соединения, которые закрываются. Такие ошибки возникают чаще всего. К сожалению я никак не могу вам помочь не видя вашего кода.

from websocket.

yshelomentsev avatar yshelomentsev commented on July 19, 2024

Спасибо за ответ!
По поводу POST - вы абсолютно правы, это я не так использую localsocket. Просто у меня задача как раз связать сокеты и микровебсервис (локальный, принимает локальные http-запросы от оборудования, которые нужно прокидывать сокетами на фронтенд), я почему-то подумал что это и есть оно... Так же снимаю вопрос по поводу множественного срабатывания колбэка - не тот функционал:) Было бы идеально чтобы я мог вызывать компонент Yii и слать ответ конкретному websocket-клиенту, но из коробки это почему-то только для localsocket работает.. т.е. если вручную вызывать компонент (я о Yii, другой инстанс), у него не будет метода sendToClient($clientId, $data, $type), а будет только sendToService, либо я что-то делаю не так и в этом случае:)

А вот по поводу дисконнектов пока вопрос не понятен для меня, код в принципе стандартный - взял Handler из одного из ваших примеров, и туда напихал логики немного. После того как понял, что падает - обернул все, что написал в try..catch-и, но это не помогло. На данный момент пришлось перейти на longpolling, но хотелось бы разобраться в чем дело:) У меня 1-2 соединения на вебсокетах и 1-2rps на входящие в микровебсервис(localsocket), и все локальные, дело не в нагрузке - точно. Попробую перейти на event, отпишусь о результатах.

from websocket.

morozovsk avatar morozovsk commented on July 19, 2024

По поводу того как слать конкретному пользователю сообщение из сторонних скриптов, ещё раз оставлю ссылку на пример с реализацией https://github.com/morozovsk/websocket-examples/tree/master/chat3/server
если пример не понятен, то могу описать другими словами.

from websocket.

yshelomentsev avatar yshelomentsev commented on July 19, 2024

Наверно я не так объяснил опять - как передать сообщение локальному сокету понятно, но как передать сообщение конкретному подключенному веб-сокету напрямую, без localsocket?

Сейчас использую localsocket только для того, чтобы передавать сообщения конкретным websocket-ам :)

from websocket.

morozovsk avatar morozovsk commented on July 19, 2024

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

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

from websocket.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.