- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想开发与 channel 的实时聊天,这些是我的需求:
- PHP backend to manage site
- Redis as session and data primary storage
- Pub/Sub to send messages only to channel's interested users
- one WebSocket connection with which the messages will be send and received.
- (optional) NodeJS to use great npm packages like timesync or socket.io
我看到了两种不同的架构来实现这一点:
使用 Socket.io
使用 Crossbar.io
这些是我的问题:
编辑:
我选择了 Crossbar.io,因为它非常强大,可以实时交流多种不同语言的应用程序。研究示例后,我想出了这个:
在每个登录用户都在数据库中生成 key 。
PHP 客户端(Thruway)连接到 Crossbar 服务器并注册自定义 WAMP-CRA 验证器
用户的浏览器连接到 Crossbar 服务器并受到挑战。 Secret 和 auth_id(用户 ID)是通过页面加载从数据库中加载的,因此它可以完成挑战并发送响应。
PHP 身份验证器在数据库中搜索提供的密码和 ID 等于 auth_id 的用户。如果有,则认证成功 session 。现在我们可以相信 auth_id 是真实的用户 ID。
这些是我的问题:
如何在订阅时获得 auth_id?
我还添加了 cookie 身份验证,身份验证后会记住浏览器。但是当我查看 Chrome DevTools 时,本地存储中没有任何 cookie 或值。即使在清除缓存后,Crossbar 仍会记住我的浏览器。我想知道这怎么可能?
编辑2:
也许我被误解了,但主要问题是选择合适的架构并获得受信任的用户 ID。没有人注意所以我奖励了赏金,然后我被否决了。我阅读了很多关于实时应用程序的文章,最后决定使用 Crossbar.io,因此我编辑了与之相关的问题。然后人们开始投票,提出另一种架构,但并没有真正回答我的问题。毕竟我自己设法做到了并提出了我的答案。
最佳答案
我看到的每个实时聊天示例都是从客户端获取 ID。这是不安全的,因为客户端很容易操纵它,所以我需要找到另一种方法。看完WAMP specs我终于明白,我不仅要在应用程序中验证用户身份,还要在 Crossbar.io 中验证用户身份。我选择了动态 WAMP-CRA 方法并实现如下:
工作流程:
每个加载的页面都包含从数据库加载的用户 ID 和 key :
<script>
auth_id = '<?php echo $user->id ?>';
secret_key = '<?php echo $user->secret_key ?>';
</script>
How I can get auth_id on subscribe?
默认情况下,发布者和订阅者彼此之间没有任何知识,但是documentation显示可以通过配置调用者身份的披露来更改它。然后你可以从回调细节中得到auth_id:
PHP:
$onEvent = function ($args, $argsKw, $details, $publicationId) use ($session) {
$auth_id = $details->publisher_authid;
...
}
$session->register('com.example.event', $onEvent);
JS:
function on_event(args, kwargs, details) {
auth_id = details['publisher_authid'];
...
}
session.subscribe('com.example.event', on_event);
I also added cookie authentication and browser is remembered after authentication. But when I look in Chrome DevTools there is any cookie nor value in local storage. Even after clearing cache my browser is still remember by Crossbar. I wonder how it is possible?
首先,清除缓存和硬重新加载不会删除 cookie。当我问这个问题时,出现了任何 cookie,但今天我可以看到 cbtid
: 两天前有 Chrome 更新,所以这可能是旧版本的错误导致的。
关于php - 在 PHP +Redis +Pub/Sub +WebSockets (+NodeJS) 中实时聊天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42666799/
我在产品类别和子类别网站上工作,可以创建的子类别数量是无限的,这意味着我们可以自己拥有子类别的子类别。一切正常,我只是有一个问题:假设“PRODUCT 1”属于“SUB SUB CATEGORY 1”
我正在学习OCaml,并在代码2022的到来中努力工作。。但似乎读取input.txt文件会导致一些问题。。我收到了这个奇怪的错误,它来自于函数分数。尤其是那个叫得分手HD的表达。不过,当我手动将LI
我有一个奇怪的行为(对于 Python 程序员)子例程,它简化如下: use strict; use Data::Dumper; sub a { my @x; sub b { push @x,
在此页上 http://bit.ly/T3yJIH , drupal 的 Nice Menu 模块不能正确显示子子菜单。如果转到菜单中的第一项,然后转到子菜单中的第一项,就可以看到它。 (Facili
我需要在我的站点内创建一个子结构,我在其中拥有: 实际上我是通过 Javascript 来完成的(伪代码):SUB_Content.height = ParentDiv.height - Sub_He
我有一个与子菜单一起使用的 CSS 手册。我想知道如何向它添加子子菜单。例如,我将鼠标悬停在主菜单项上并弹出子菜单,然后我将鼠标悬停在子菜单项上并弹出另一个子菜单。这是我现在使用的 JS Fiddle
我有一个关于 navmenu 的问题我不能选择导航菜单的 sub sub ul,如果我会做什么它会影响 3.ul。这是一个 wordpress 菜单我没有机会使用类或菜单的 ID。提前感谢您的帮助。
我创建了一个带有 2 级子菜单的简单导航。我正在寻找“sub sub”选项以显示在其父项的右侧而不是下方。对于 CSS 的任何帮助,我将不胜感激。下面是 html 和 css 以及 JS fiddle
我对 VBA、这个论坛和编程很陌生。我有一个工作表,我已经设法根据我的要求谷歌并调整某些代码行。 我的问题是我总共有三个潜艇,必须逐步运行每个 VBA 脚本。我希望将所有三个 VBA 脚本合二为一。
我使用 sub 调用作为另一个 sub 的参数。示例代码: test(isInString(), 'second parameter', 'third parameter'); sub test {
我想使用 HTML ui->FresBox->setText("fres"); 但它在 QCheckbox 中不起作用。如果您使用标签,它会很好用。有什么不同以及如何在 QCheckbox 中使用 H
我没有遇到这个问题,但在处理相关问题时想到了这个问题。让我们: logging = 'something' # bad naming decision import logging as lg
我正在查看 Redis pubsub,消费者是 2-4 节点自动缩放组的一部分(HA 原因) 也许我遗漏了一些明显的东西,但是 Redis pubsub 中是否有某种机制可以管理订阅者/消费者收到的重
对你们来说应该是一个快速和简单的,为什么这不起作用? 代码限制用户只能在文本框中输入文本。 它工作正常,但我有大约 50 个文本框,所以会更干净,更容易调用。 但是,这样做,限制不再起作用 Priva
(编辑)TL; DR :我的问题是,尽管Win32 API定义的是真实的整数常量(如平台SDK header 中一样),而Win32 Perl包装器将它们定义为subs。从而引起一线解析的误解。 在单
我有一个使用 Jersey 实现 REST API 的 Web 应用程序。 Web 容器 id Tomcat 以下是 API 的摘要: /rest/patients 获取患者元数据列表。 /rest/
我与 Czech 一起工作Python 3.4 中的重音文本。 调用 re.sub()用正则表达式对重音句子进行替换效果很好,但使用用 re.compile() 编译的正则表达式然后调用regex.s
对于我的一个新项目,我必须创建一个包含主类别、子类别和子子类别的类别页面。例如; 互联网 互联网 > 发展 互联网 > 开发 > 移动应用 在此类别中,您可以找到有关这些内容的网站。我必须为每个网站提
表1 - 客户数据 c_id(整数) 名称(varchar) 表2 - account_data a_id(整数) c_id (int) -> 使用customer_data。c_id plan_id
我有一些位图文件(jpeg、png、...),我想编写一个 C++ 程序,将这些位图文件连接到 pes 流(mpeg-2 格式),然后创建一个子文件(.sub/. idx:vobsub 字幕文件)。
我是一名优秀的程序员,十分优秀!