walkor / GatewayWorker

Distributed realtime messaging framework based on workerman.
MIT License
1.01k stars 294 forks source link

[Question] Listen multiple sockets #90

Open abhinavgmfs opened 2 years ago

abhinavgmfs commented 2 years ago

Hi Walkor,

How can we do the multiple socket like workerman in gateway worker solution.

Can you send me the example.

https://github.com/walkor/workerman/issues/479

Thank you

walkor commented 2 years ago

Please post your start_gateway.php content.

abhinavgmfs commented 2 years ago
<?php 
use Workerman\Worker;
use GatewayWorker\Gateway;
use Workerman\Autoloader;

// gateway 进程
$gateway = new Gateway("websocket://" . SOCKET_SERVER_IP . ":" . SOCKET_PORT);

$gateway->name = GATEWAY_NAME;

$gateway->count = 1;

$gateway->lanIp = SOCKET_LAN_IP;

$gateway->startPort = SOCKET_START_PORT;

$gateway->registerAddress = SOCKET_REGISTER_ADDRESS;

if(!defined('GLOBAL_START'))
{
    Worker::runAll();
}
walkor commented 2 years ago

Create start_gateway2.php which like this.

<?php 
use Workerman\Worker;
use GatewayWorker\Gateway;
use Workerman\Autoloader;

//  == here === 
$gateway = new Gateway("websocket://" . SOCKET_SERVER_IP . ":" . SOCKET_PORT + 1);

$gateway->name = GATEWAY_NAME;

$gateway->count = 1;

$gateway->lanIp = SOCKET_LAN_IP;

// === here ===
$gateway->startPort = SOCKET_START_PORT + 200;

$gateway->registerAddress = SOCKET_REGISTER_ADDRESS;

if(!defined('GLOBAL_START'))
{
    Worker::runAll();
}

Restart

abhinavgmfs commented 2 years ago

Thank you!

How can we send message from gateway 2 to client connected in gateway 1

Example: If clientId = 1 is connected to Gateway1 and clientId = 2 is connected to Gateway2

then how can we send message to clinetid = 1 from client connected in gateway2

Gateway::sendToClient($clientId, $message, $raw);

walkor commented 2 years ago

Just call Gateway::sendToClient($clientId1,$message, $raw);

abhinavgmfs commented 2 years ago

Thank you!

But all the business logic loads still on one process of business worker and we are bound to use only one business worker process due to internal design of the project that stores arrays inside the business logic.

Any idea how we can handle this?

Thank you