使用Websocket和Pusher显示连接用户登录状态

2024-01-08

我第一次使用 Pusher 构建聊天室 Web 应用程序。我阅读了很多 Pusher 的文档来了解它是如何工作的。我的问题更多是关于机制而不是代码。

所以我想做的是,当用户连接并加入presence-channel这使我可以显示谁在线。我想为用户(如Skype)显示一个状态标志(绿色=在线,黄色=离开),并且所有登录的用户都可以实时看到状态之间的变化。

我见过这个问题 https://stackoverflow.com/questions/27375125/pusher-one-to-one-chat-structure如果我理解的话,每个用户都必须加入私人频道才能更好地管理其客户端事件。那么我如何管理更改状态事件private-channel并显示在presence-channel或者我如何在两个渠道之间进行通信?


您不需要单独的渠道来建立用户状态。

现在实现这一目标的最佳方法是使用类似的方法来检测用户状态idle.js https://github.com/shawnmclean/Idle.js然后在存在通道上触发一个事件(也许client-status-updated)以及有关用户状态的信息(例如{"user_id":SOME_ID, "status":"away"}).

注意:对于客户端事件client-事件名称需要前缀

您可以使用以下方法执行此操作客户活动 https://pusher.com/docs/client_events这可以在现有的存在渠道上完成。但是,您应该意识到,通过使用客户端事件,这意味着任何经过身份验证的用户都可能触发状态事件,并表明该事件完全适用于另一个用户。因此,通过可以设置状态的服务器来执行此操作会更安全,即使它来自正在设置状态的用户。

但是,我并没有真正看到“黑客”设置其他用户状态的好处。

以下是使用状态通道和客户端事件的示例。

<script src="libs/idle.js"></script>
<script src="//js.pusher.com/2.2/pusher.min.js"></script>
<script>
var pusher = new Pusher(APP_KEY);
var presence = pusher.subscribe('presence-online');

// Basic online/offline
presence.bind('pusher:subscription_succeeded', function(members) {
  members.each(addUser);
});

presence.bind('pusher:member_added', addUser);
presence.bind('pusher:member_removed' removeUser);

function addUser(member) {
  // Online - add to UI
}

function removeUser(member) {
  // Offline - remove from UI
  // Consider doing this in a setTimeout
  // in case the user comes back online again
}

// User state
var idle = new Idle({
  onHidden:    function() { sendUserStatus('hidden'); },
  onVisible:   function() { sendUserStatus('visible'); },
  onAway:      function() { sendUserStatus('away'); },
  onAwayBack:  function() { sendUserStatus('hidden'); },
  awayTimeout: 30000 //away with 30 seconds of inactivity
}).start();

function sendUserStatus(status) {
  var userStatusUpdate = {
    "user_id": presence.members.me.id, // current user unique ID
    "status": status
  };
  presence.trigger('client-status-updated', userStatusUpdate);
}

presence.bind('client-status-updated', function(update) {
  var userId = update.user_id;
  var status = user.status;
  // Update UI to reflect user status
});
</script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Websocket和Pusher显示连接用户登录状态 的相关文章

  • 在 PHP 中接受带有小数点和千位分隔符的国际数字

    对于用户可以输入能量值来计算相应费用的在线计算器 我需要 PHP 脚本来接受各种用户输入 200 万又四分之一焦耳 的值可以输入为 2000000 25 默认表示法 2 000 000 25 带千位分隔符 2000000 25 逗号作为小数
  • if/else 简写来定义变量

    我很难理解 if else 的 php 简写是如何描述的here https stackoverflow com questions 20233207 php if shorthand and echo in one line possib
  • 禁用 WooCommerce 手动/编辑订单的电子邮件通知

    需要 WooCommerce 专业知识 我需要禁用手动创建的订单的电子邮件通知 我必须使用处理状态 由于处理订单状态的自定义挂钩 我无法创建自定义状态 理想情况下 手动订单页面中可以勾选一个复选框 勾选后 它将禁止在每种状态下向客户发送电子
  • 我可以让 swagger-php 在查询字符串上使用数组吗?

    我使用 Swagger php 当我定义查询字符串上的参数时 它可以是一个数组 但据我所知 它不支持这种查询字符串 https api domain tld v1 objects q 1 q 5 q 12 我相信这会被设定in the co
  • Symfony2:为什么请求传递到受 Symfony2 中 AppCache 影响的 Kernel.Terminate EventListener

    在我的 Symfony2 2 应用程序中 我使用 onKernelTerminate EventListener 以便我可以在渲染响应后进行一些 繁重 处理 以便用户收到更快的响应时间 在我的控制器中 我在请求上设置了一个属性 以便当事件侦
  • Ajax 没有将我重定向到下一页

    我正在尝试将单击的图像的 ID 传递到下一页 当我开发代码时 它没有将我重定向到下一页 当我单击 F12 并检查网络中的 POST 时 它显示变量已正确传递到下一页 如附图所示 但它没有将我重定向到下一页 所以现在我知道变量在下一页中正确传
  • 尝试使用 php 发送 POST 请求,无论我做什么,我都会收到“HTTP ERROR 500”

    为了发出 HTTP 请求 有人建议我尝试使用 PHP 并给了我一段代码 url https example com dashboard api data array to gt PHONE NUMBER from gt SENDER ID
  • php源代码到PO文件生成器

    我必须将我的所有回显 打印字符串转换为PHP源代码代码文件到PO file 为了语言翻译 有批次吗对流器可用于相同的 我如何做到这一点 make gettext在您的服务器上运行 setup a 翻译适配器 例如带有 gettext 适配器
  • 如何隐藏 URL 中的锚标记

    如何隐藏地址栏中以下链接 href 的哈希值 a href index php dev name 所以它会将我重定向到index php dev name 但我希望地址栏只显示index php 您可以使用 Javascript oncli
  • 如何关闭未关闭的 HTML 标签?

    每当我们从数据库或类似来源获取一些经过编辑的用户输入内容时 我们可能会检索仅包含开始标记但不包含结束标记的部分 这可能会妨碍网站当前的布局 有客户端或服务器端的方法来解决这个问题吗 找到了一个很好的答案 使用 PHP 5 并使用 DOMDo
  • 如何将我的 init 函数中的代码集中到所有控制器中?

    public function init this gt view gt user Zend Auth getInstance gt getIdentity this gt view gt siteName Zend Registry ge
  • WordPress 包含 SVG 文件错误

    我使用 PHP 和 WordPress 在本地主机上 我可以毫无问题地包含 SVG 文件 但在实时服务器上 我尝试包含一个 SVG 文件以便能够使用 CSS 对其进行样式设置 我收到此错误消息 Parse error syntax erro
  • 使用 Instagram Basic Display API 时出现“无效平台应用程序”错误

    我正在尝试使用 Instagram Basic 显示 API 但是当我发布授权代码以获取访问令牌时 我不断收到以下错误 error type OAuthException 代码 400 error message 平台应用无效 我正在遵循此
  • 对 SimpleXML 数据进行排序和分组

    我正在对 XML 文件中的出版物数据进行排序和分组 我目前使用的方法效果很好大部分情况下 尽管我觉得有一种更有效的方法来完成我想要完成的任务 以下是目标节点的示例
  • Codeigniter - 出现 404 Not Found 错误

    我们在 godaddy 有两个托管套餐 我们的实时网站使用以下 htaccess 文件运行良好 无需在 url 中使用 index php 即可访问网站 RewriteEngine On RewriteCond REQUEST FILENA
  • 如何将 Smarty 3 包含到 Laravel 4 中?

    我是 Laravel 的新手 所以仍在习惯这些概念 但是我有大约 10 年的使用 Smarty 的经验 所以我希望利用这一点 除了事实上 Blade 似乎缺乏太多我发现有用且在 Smarty 中开箱即用的功能 但无论如何除了这个问题的要点之
  • 如何删除文件

    我们有一个脚本 scripts ourscript php和一个文件 media movie1 flv 当我们运行时 我们如何删除这个文件ourscript php Using unlink http php net manual en f
  • 如何从 Laravel 执行存储过程

    我需要在表单提交数据后执行存储过程 我让存储过程按照我想要的方式工作 并且我的表单正常工作 我只是不知道从 laravel 5 执行 sp 的语句 它应该是这样的 执行 my stored procedure 但我似乎在网上找不到类似的东西
  • 如何使用 php 将 *.xlsb 转换为数组或 *.csv

    我正在尝试转换 xlsb文件到php array or csv文件 或至少 xls 我尝试使用PHPExcel 但看起来它无法识别该文件中的内容 我注意到 你可以重命名 xlsb文件到 zip文件 然后使用命令行解压缩unzip zip 之
  • 如果产品重量超过1000克,如何以公斤为单位显示

    在 Storefront 主题中 我使用下面的代码将格式化重量从 1000g 更改为 1kg add action woocommerce after shop loop item title show weight 10 function

随机推荐

  • 在批处理文件参数中保留“=”(等号)字符

    我编写了一个批处理文件来启动应用程序 该应用程序不是我的 我无法修改它 批处理文件本身接受一些参数 应用程序接受其他参数 批处理文件使用 SHIFT 使用其所有选项 然后使用正确的环境启动应用程序 并将其余参数传递给应用程序 调用批处理文件
  • 将 javascript 注入 javascript 函数

    我有一个奇怪的问题 我需要将一些 javascript 注入到另一个 javascript 函数中 我正在使用一个已锁定的框架 因此我无法更改现有功能 我得到的是这样的东西 function doSomething 我可以操纵 上面 但是我
  • 在我的 Java 应用程序中添加 Web 浏览器

    我有一个java应用程序 用于查看网络内容 所以我想在我的应用程序中添加一个功能齐全的浏览器 我已经尝试过了JEditorPane并且它不处理动态内容 还有其他办法吗 有关如何做的任何帮助吗 这个链接是很好的例子 在 swing 中创建浏览
  • 如何在Java/Swing中使用JLabel制作动画?

    我有一个Java课程的期末项目 它是青蛙跳跃游戏 这是描述它的视频 https www youtube com watch v NxWWP9cK24o https www youtube com watch v NxWWP9cK24o 我不
  • # 登录 CSS 选择器

    一些 CSS 选择器有 在他们面前 这意味着什么 它是 ID 选择器 CSS 标准的基本功能 它根据给定的 ID 匹配 HTML 元素id属性 当然 假设有一个合格的文档 看W3C 选择器规范 http www w3 org TR sele
  • iframe 可以在 WKWebView 中与 Cordova 一起使用吗?

    根据 Apache Cordova 博客 iframe 可能无法使用 WKWebView https cordova apache org news 2018 08 01 future cordova ios webview html ht
  • 将 javascript 代码段附加到 body 标记的末尾

    我正在寻找一种将 javascript 代码块插入到 ASP NET 页面末尾的方法 Page ClientScript RegisterClientScriptBlock typeof Page showVideo sScript tru
  • 使用 HQL 选择集合

    我有以下课程 人 java class Person String name Set
  • 与变量的抽象矩阵乘法

    我知道 python 进行矩阵乘法的能力 不幸的是我不知道如何抽象地做到这一点 所以不与 确定的数字 但带有变量 Example M 1 0 1 d a c 0 1 有没有办法定义a c和d 以便矩阵乘法 给我 1 d a a d c Us
  • 折叠过渡不适用于 Angular 的 UI Bootstrap

    我正在尝试创建一个 div 当单击按钮时它将显示 隐藏 这UI 引导页面 https angular ui github io bootstrap 显示了一个使用 css 过渡的简单示例 这是我的fiddle https jsfiddle
  • 如何反编译在 VS.net 中创建的 .dll 文件

    我需要反编译在 VS net 中创建的 dll 文件 有没有可用的工具来执行此操作 或者我可以有一些代码来做到这一点吗 请帮忙 编辑2 我现在使用来自 Jetbrains 的 DotPeek https www jetbrains com
  • [-f:未找到命令,Bash 脚本文件确实存在[重复]

    这个问题在这里已经有答案了 我正在尝试编写的脚本遇到问题 缩小并简化了代码 它给出了未找到命令的错误 如果我在命令行中执行 test f file 它不会返回任何内容 而不是找不到命令 PATH 1 bin bash DIR 1 if f
  • 在 Tomcat 7 中使用智能卡和 LDAP 对用户进行身份验证

    我有一个在 Tomcat 7 上运行的 Web 应用程序 它配置了自定义 JNDIRealm 并且 web xml 中的登录配置身份验证方法设置为 FORM 我正在尝试找到一种方法来添加通过同一 LDAP 使用智能卡 如果有 对用户进行身份
  • $.getScript 中未定义函数

    这个一定很简单 外部 javascript 文件包含 function Hello alert Hello It is getScript ed 然后调用一个包含的函数 I get ReferenceError Hello 未定义 但是如果
  • 返回 404 错误的 Apache 自定义 404 页面

    我的 apache 404 php 上有一个自定义 404 错误页面 它可以正常工作 但是如果有人或任何搜索引擎请求 404 php页面 服务器返回200 OK 因为该页面确实存在 我已经把Disallow 404 php on my ro
  • 为什么要在自定义计算表达式生成器中使用 Builder.Source()?

    阅读通过F 4 0 规范 http fsharp org specs language spec 我在PDF第79页看到以下内容 辅助功能src e 表示b Source e 如果最里面的 ForEach 来自用户代码而不是由翻译生成 并且
  • 为什么非常量引用不能绑定到临时对象?

    为什么不允许获取对临时对象的非常量引用 哪个函数getx 回报 显然 这是 C 标准所禁止的 但我对这种限制的目的感兴趣 不是参考达到标准 struct X X ref return this X getx return X void g
  • 使用 .Rmd 文件中的knitr 有条件地评估航向

    是否可以有条件地评估代码块and使用 R Markdown 的相关标题和knitr 例如 如果eval cell is TRUE包括块and它的标题 但不包括 ifeval cell is FALSE r eval cell TRUE He
  • 从视频重建 3D 轨迹(由单个摄像机拍摄)

    我目前正在尝试根据 iPhone 视频中拍摄的一系列图像重建球或岩石等下落物体的 3D 轨迹 我应该从哪里开始寻找 我知道我必须校准相机 我想我会使用 Jean Yves Bouguet 的 matlab 校准工具箱 然后从相同的序列中找到
  • 使用Websocket和Pusher显示连接用户登录状态

    我第一次使用 Pusher 构建聊天室 Web 应用程序 我阅读了很多 Pusher 的文档来了解它是如何工作的 我的问题更多是关于机制而不是代码 所以我想做的是 当用户连接并加入presence channel这使我可以显示谁在线 我想为