Git Product home page Git Product logo

Comments (4)

morozovsk avatar morozovsk commented on August 19, 2024

спасибо за найденную ошибку, но думаю, что предложенное вами исправление не совсем верное.
В оригинале есть строка if (!strlen($data)) return; которую вы изменили, но она очень важная.
Эта строка обрабатывает событие READ с нулевой длиной, т.е. сокет закрылся, это используется в коде в другом месте if (is_null($this->_read($connectionId))) { //connection has been closed Если эту строку убрать, то соединения не будут закрываться на сервере тогда когда оно уже было закрыто на клиенте.

Я склоняюсь к такому коду, который исправит описанные вами и мной проблемы:

$length = 0;
while ($data = $this->buffers[$connectionId]->read(self::SOCKET_BUFFER_SIZE)) {
//add the data into the read buffer
@$this->_read[$connectionId] .= $data;
$length += strlen($data);
}
return $length > 0 && strlen($this->_read[$connectionId]) < self::MAX_SOCKET_BUFFER_SIZE;

К сожалению у меня сейчас нет тестового стенда, поэтому я не могу проверить этот код, внести изменения в библиотеку и npm.

from websocket.

denis-ftc-denisov avatar denis-ftc-denisov commented on August 19, 2024

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

from websocket.

olegius88 avatar olegius88 commented on August 19, 2024

Внес в код изменения выше, получил ошибку и сокеты не работали:

PHP Notice: Undefined offset: 10 in /morozovsk/websocket/GenericEvent.php on line 124
PHP Stack trace:
PHP 1. {main}() /socket.php:0
PHP 2. morozovsk\websocket\Server->restart() /socket.php:103
PHP 3. morozovsk\websocket\Server->start() /morozovsk/websocket/Server.php:137
PHP 4. morozovsk\websocket\GenericEvent->start() /morozovsk/websocket/Server.php:84
PHP 5. EventBase->dispatch() /morozovsk/websocket/GenericEvent.php:50
PHP 6. morozovsk\websocket\GenericEvent->onRead() /morozovsk/websocket/GenericEvent.php:50
PHP 7. morozovsk\websocket\GenericEvent->_readFromBuffer() /morozovsk/websocket/GenericEvent.php:79

в 124й строке метод:

protected function _readFromBuffer($connectionId) {
$data = '';

/124я строка/ if (false !== ($pos = strpos($this->_read[$connectionId], self::SOCKET_MESSAGE_DELIMITER))) {
$data = substr($this->_read[$connectionId], 0, $pos);
$this->_read[$connectionId] = substr($this->_read[$connectionId], $pos + strlen(self::SOCKET_MESSAGE_DELIMITER));
}

    return $data;
}

from websocket.

morozovsk avatar morozovsk commented on August 19, 2024

внёс изменения в библиотеку. обновил версию в композере до 4.2.2. ещё раз спасибо за качественное описание бага

read с нулевой длиной не должен случаться, вместо него должен случиться error.

проверил - всё так :)

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.