gpt4 book ai didi

php - Autobahn.js - 如何在订阅时传递数据

转载 作者:行者123 更新时间:2023-12-04 16:13:45 26 4
gpt4 key购买 nike

我正在使用 Ratchet 和 Autobahn.js。我想在订阅时进行一些用户验证,所以我需要将 session key 传递给 Ratchet WAMP 服务器。你能告诉我如何在订阅事件中将一些数据传递给服务器吗?

最佳答案

我假设您不是在谈论身份验证,并且您已经与服务器建立了连接。

您无需从客户端传递 session ID,WAMP 会为您处理。订阅时您可以传递的唯一信息是主题。

在 php 端,您可以访问可用于验证的 session ID。

public function onSubscribe(ConnectionInterface $conn, $topic) 
{
$sessionId = $conn->WAMP->sessionId
}

替代解决方案:如果您真的必须从客户端传递 session ID,那么您可以执行以下操作:

Javascript:
var appSession = null;

ab.connect(
// The WebSocket URI of the WAMP server
wsuri,

// The onconnect handler
function (session) {
appSession = session;
}
);


appSession.call('myValidationChannelForUser', appSession.sessionid(), 'otherValidationParams').then(function(result)
{
if (result.success)
{
console.log('you have been subscribed to xyz..');
}
}

php:
public function onCall(ConnectionInterface $conn, $id, $fn, array $params) 
{
$sessionId = $conn->WAMP->sessionId;

if ($fn == 'myValidationChannelForUser')
{
// validation...
// $params[0] == appSession.sessionid() passed from JS
// $params[1] == otherValidationParams passed from JS

// validation passed, subcribe to channel
if (validated)
{
$this->onSubscribe(ConnectionInterface $conn, $topic);

return $conn->callResult($id, array('success' => 1);
}
}
}

关于php - Autobahn.js - 如何在订阅时传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21457280/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com