使用PHP Workerman的socket.io

我手中有这种情况: 第三方调用一个API,并且基于登机号的API应该将一些信息发送到Gate Web应用程序。我使用socket.io实现了这种情况。我有三个文件: 1.API(苗条)

$app->get('/socketio',function($request,$response,$args) {

    $params= $request->getQueryParams();
    $PNumber = $params['PNumber'];
    $gateNumber =  $params['gateNumber'];

    $emitter = new Emitter();
    $emitter->emit('new message',array('gateNumber'=>'gateNumber','PNumber'=>$PNumber));

});

  1. server.php
<?php
use Workerman\Worker;
use Workerman\WebServer;
use Workerman\Autoloader;
use PHPSocketIO\SocketIO;

// Composer autoload
require __DIR__ . '/vendor/autoload.php';

// =======Channel server========
$channel = new Channel\Server();

$io = new SocketIO(2020);
// ========ChannelAdapter========
$io->on('workerStart',function()use($io){
    $io->adapter('\PHPSocketIO\ChannelAdapter');
});
$io->on('connection',function($socket) use($io){
    $socket->addedUser = false;

    // when the client emits 'new message',this listens and executes
    $socket->on('new message',function ($data)use($socket,$io){

        // we tell the client to execute 'new message'
        $socket->broadcast->emit('new message',$data);
    });
});
Worker::runAll();

3.Gate Web应用程序-client.html

<!DOCTYPE html>
<html>
    <head>
        <title>Chat</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width,initial-scale=1.0">
    </head>
    <body>
        <div id="chat-messages" style="overflow-y: scroll; height: 100px; "></div>
        <input type="text" class="message">
    </body>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>    
    <script src="node_modules/socket.io-client/dist/socket.io.js"></script>  
    <script>
            var socket = io.connect("http://127.0.0.1:2020");

            $('.message').on('change',function(){
                socket.emit('new message',$(this).val());
                $(this).val('');
            });

            socket.on('new message',function(data){
                $('#chat-messages').append('<p>' + data +'</p>');
            });
    </script>
</html>

通过在命令行中运行server.php并在浏览器中打开client.html并通过Postman或Web浏览器调用API,数据将显示在client.html文件中。

现在我的问题是:如何更改代码以仅将数据发送到特定的门户网页而不进行广播?我可以通过检查client.html中的门号来做到这一点,如果它与它的gatenmber不匹配,则不要更新#chat-message,但我更喜欢更改server.php和API代码来这样做。我知道我可以创建聊天室之类的东西,并在他们的房间中注册门,但是我不知道如何与Workerman一起做!

任何帮助将不胜感激。

ci123042908 回答:使用PHP Workerman的socket.io

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3166061.html

大家都在问