andreybolonin / ratchet-multi-instance
Ratchet multi instance
Installs: 7
Dependents: 0
Suggesters: 0
Security: 0
Stars: 8
Watchers: 2
Forks: 0
Open Issues: 1
pkg:composer/andreybolonin/ratchet-multi-instance
Requires
- php: >=7.1
 - cboden/ratchet: ^0.4.1
 - gos/websocket-client: ^0.1.2
 
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.11
 - phpstan/phpstan: ^0.9.2
 
This package is not auto-updated.
Last update: 2025-10-30 01:23:33 UTC
README
0) Check, do you install high perfomance ext-event extension (libevent)
http://socketo.me/docs/deploy#evented-io-extensions
https://github.com/reactphp/event-loop#exteventloop
| Connections | stream_select | libevent | 
|---|---|---|
| 100 | 10.656 | 9.298 | 
| 500 | 11.175 | 9.791 | 
| 800 | 17.327 | 9.709 | 
| 1000 | 23.282 | 9.749 | 
https://www.pigo.idv.tw/archives/589
1) Define your pool (config/services.yaml)
wampserver_broadcast: ['127.0.0.1:8095', '127.0.0.1:8097', '127.0.0.1:8099']
2) Exclude this node
$key = array_search($this->websocket_this_node, $this->wampserver_broadcast);
unset($this->wampserver_broadcast[$key]);
3) Run your nodes
bin/console server:run --port=8095
bin/console server:run --port=8097
bin/console server:run --port=8099
4) Setup NGINX (as load balancer)
upstream socket {
    server 127.0.0.1:8095;
    server 127.0.0.1:8097;
    server 127.0.0.1:8099;
}
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}
server {
	server_name 127.0.0.1;
	listen 8090;
	proxy_next_upstream error;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Scheme $scheme;
	proxy_set_header Host $http_host;
	location / {
		proxy_pass http://socket;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto https;
                proxy_read_timeout 86400; # neccessary to avoid websocket timeout disconnect
                proxy_redirect off;
	}
}
http://nginx.org/en/docs/http/load_balancing.html http://nginx.org/en/docs/http/websocket.html
Installation
- 
composer req andreybolonin/ratchet-multi-instance - 
Inject
use RatchetMultiInstanceTrait;into your Topic class - 
Add
broadcast/channelinto you Topic class 
public function onPublish(ConnectionInterface $connection, $topic, $event, array $exclude, array $eligible) { switch ($topic->getId()) { case 'counter/channel': $this->CounterTopic($connection, $topic, $event, $exclude, $eligible); break; case 'price/channel': $this->PriceTopic($connection, $topic, $event, $exclude, $eligible); break; case 'broadcast/channel': $this->BroadcastTopic($connection, $topic, $event, $exclude, $eligible); break; } }
- Send the 
$topic->broadcast($event)with$this->broadcast($event)for broadcasting in another WampServer nodes 
