Hoa central

Hoa is a modular, extensible and structured set of PHP libraries. Moreover, Hoa aims at being a bridge between industrial and research worlds.


This library allows to manipulate the WebSocket protocol and proposes a server and a client. It supports two specifications RFC6455 and Hybi (at the same time).


With Composer, to include this library into your dependencies, you need to require `hoa/websocket`:

```json { "require": { "hoa/websocket": "~2.0" } } ```

Please, read the website to get more informations about how to install.

Quick usage

As a quick overview, we propose to start a websocket server and echo messages. The class Hoa\Websocket\Server proposes six listeners: open, message, binary-message, ping, close and error. Thus:

```php $websocket = new Hoa( new Hoa('tcp://') ); $websocket->on('open', function (Hoa $bucket) { echo 'new connection', "\n";

return; }); $websocket->on('message', function (Hoa $bucket) { $data = $bucket->getData(); echo '> message ', $data['message'], "\n"; $bucket->getSource()->send($data['message']); echo '< echo', "\n";

return; }); $websocket->on('close', function (Hoa $bucket) { echo 'connection closed', "\n";

return; }); $websocket->run(); ```

Finally, we have to write a client in HTML and Javascript:

```html <input type="text" id="input" placeholder="Message…">

<script> var host = 'ws://'; var socket = null; var input = document.getElementById('input'); var output = document.getElementById('output'); var print = function (message) { var samp = document.createElement('samp'); samp.innerHTML = message + '
'; output.appendChild(samp);

return; };

input.addEventListener('keyup', function (evt) { if (13 === evt.keyCode) { var msg = input.value;

if (!msg) { return; }

try { socket.send(msg); input.value = ''; input.focus(); } catch (e) { console.log(e); }

return; } });

try { socket = new WebSocket(host); socket.onopen = function () { print('connection is opened'); input.focus();

return; }; socket.onmessage = function (msg) { print(msg.data);

return; }; socket.onclose = function () { print('connection is closed');

return; }; } catch (e) { console.log(e); } </script> ```

Here we are. All sent messages are echoed.


The following awecodes show this library in action:


Different documentations can be found on the website: http://hoa-project.net/.


Hoa is under the New BSD License (BSD-3-Clause). Please, see `LICENSE`.