我手中有这种情况: 第三方调用一个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));
});
- 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一起做!
任何帮助将不胜感激。