我想与 channel 进行实时聊天,这是我的需求:
我看到两种不同的体系结构可以实现此目的:
带有Socket.io的
这些是我的问题:
编辑:
我选择了Crossbar.io,因为它功能非常强大,并且可以实时交流许多不同的语言应用程序。在研究示例之后,我得出了以下结论:
可以完成挑战并发送回复。
session 。现在我们可以相信auth_id是真实的用户ID。
这些是我的问题:
编辑2:
也许我被误解了,但是主要的问题是选择合适的体系结构并获得可信任的用户ID。没有注意,所以我授予赏金,此后我被否决了。我阅读了很多有关实时应用程序的信息,并最终决定使用Crossbar.io,因此我编辑了与其相关的问题。然后人们开始反对,提出了另一种架构,但并没有真正回答我的问题。毕竟,我自己设法做到了,并提出了我的答案。
最佳答案
关于获取用户ID:
我看到的每个实时聊天示例都从客户端获取ID。这是不安全的,因为客户端可以轻松地对其进行操作,因此我需要找到另一种方法。阅读WAMP specs之后,我终于发现不仅要在应用程序中而且还要在Crossbar.io中对用户进行身份验证。我选择了动态WAMP-CRA方法,并实现了以下方法:
<script>
auth_id = '<?php echo $user->id ?>';
secret_key = '<?php echo $user->secret_key ?>';
</script>
答案:
默认情况下,发布者和订阅者之间彼此不了解,但是documentation显示可以通过配置公开调用者身份来更改它。然后,您可以从回调详细信息中获取auth_id:
$onEvent = function ($args, $argsKw, $details, $publicationId) use ($session) {
$auth_id = $details->publisher_authid;
...
}
$session->register('com.example.event', $onEvent);
function on_event(args, kwargs, details) {
auth_id = details['publisher_authid'];
...
}
session.subscribe('com.example.event', on_event);
首先,清除缓存和硬重装不会删除cookie。当我问这个问题时,有任何cookie出现,但是今天我可以看到
cbtid
:两天前进行了Chrome更新,因此这可能是由先前版本中的错误引起的。