通知用户消息仍在输入中

2024-06-21

我正在使用 Laravel 5.6.7、Socket.IO 和 vue.js。我没有使用 Pusher 和 redis。下面是我的代码,用于向与我一对一聊天的用户发送消息。

var url = "http://localhost:6001/apps/My_appId/events?auth_key=My_Key";

var socketId = Echo.socketId();
var request = {
    "channel": "private-Send-Message-Channel.2",
    "name": "MessengerEvent",
    "data": {
        "msg": message
    },
    "socket_id": socketId
};
axios.post(url, JSON.stringify(request)).then((response) => {
    //Message Sent
});

我试图通知正在与我聊天的用户我仍在打字。我应该使用上面相同的代码在每个 char 类型上发出 xhr 吗?这是通知用户消息输入仍在进行中的唯一方法吗?

Update 1

有没有更好的方法为每次按键发布如上所述的 xhr ?我的意思是如果用户输入 200 个字符。我会发布 xhr 200 次吗?

or

我们是否有一个名为 Whisper 和 ListenForWhisper 的事件,如下所示https://laravel.com/docs/5.6/broadcasting#client-events https://laravel.com/docs/5.6/broadcasting#client-events?我正在使用 vue.js 和 laravel 5.6.7不带推杆 and 没有redis


如果你看一下广播文献 https://laravel.com/docs/5.6/broadcasting#client-events您将看到两个可以在 Vue.js 应用程序中使用的代码片段。

要广播客户端事件,您可以使用 Echowhisper method:

Echo.private('chat')
    .whisper('typing', {
        name: this.user.name
    });

要监听客户端事件,您可以使用listenForWhisper method:

Echo.private('chat')
    .listenForWhisper('typing', (e) => {
        console.log(e.name);
    });

当用户打字时,您可以debounce https://lodash.com/docs#debounce上面的耳语方法。

如果您不想使用像 lodash 这样的其他库,您可以通过简单地包装来实现去抖whisper在超时的情况下。以下方法将每 300 毫秒广播一次耳语:

isTyping() {
    let channel = Echo.private('chat');

    setTimeout(function() {
        channel.whisper('typing', {
            name: this.user.name,
            typing: true
        });
    }, 300);
}

该应用程序需要触发isTyping()onkeydown事件发生在聊天应用程序的输入字段中。

创建应用程序后,您还需要聆听耳语。以下方法将设置typing收到事件后 600 毫秒内变量为 true。

created() {
    let _this = this;

    Echo.private('chat')
        .listenForWhisper('typing', (e) => {
            this.user = e.name;
            this.typing = e.typing;

            // remove is typing indicator after 0.6s
            setTimeout(function() {
                _this.typing = false
            }, 600);
        });
},
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通知用户消息仍在输入中 的相关文章

随机推荐

  • 如何使用具有比较标准的 findBy 方法

    我需要使用使用比较标准 不仅仅是精确标准 的 神奇查找器 findBy 方法 换句话说 我需要做这样的事情 result purchases repository gt findBy array prize gt gt 200 这样我就可以
  • 如何从debug.keystore文件获取MD5?

    我使用一些命令来获取 MD5 私钥debug keystore文件 但实际上我得到的是 SHA1 私钥而不是 MD5 我不知道如何获得MD5 这是我使用的命令 keytool list alias androiddebugkey keyst
  • SerialPort.Read(byte[], int32, int32) 不是阻塞的,但我想要它 - 我该如何实现?

    我正在编写一个用于与测试设备通信的接口 设备通过串行端口进行通信 并以已知的字节数响应我发送的每个命令 我当前的结构是 发送命令 读回指定字节数 继续申请 但是 当我使用 SerialPort Read byte int32 int32 时
  • 如何使用 C++20 std::format?

    C 20介绍std format 相比有哪些优势printf or std cout 我该如何使用它 有人给出了一个例子吗 与 printf 相比有哪些优点 类型安全 对于 printf 程序员必须仔细地将格式说明符与参数的类型相匹配 如果
  • 如何在 Code::Blocks 中启用 C 自动完成?

    如何在 Code Blocks 中启用 C Std lib 函数自动完成 转到 设置 gt 编辑器 gt 代码完成和符号浏览器 并确保未选中 禁用代码完成
  • 为什么 DragHandler exportAsDrag 禁用我的 MouseMotionListener?

    我想实现一个简单的 JComponent 拖放 并带有 O Reilly Swing Hacks 的预览 我的问题是 如果 TransferHandler 启动 Drag MouseMotionListener 停止执行 mouseDrag
  • 来自外部 XML 的 Android 本地化

    是否可以使用从服务接收到的 XML 在运行时翻译 Android 应用程序 如果可能的话 请有人指出我正确的方向 谢谢 Warning 我读到的所有内容都表明 让您的应用程序更改语言不是一个好主意 因为 Android 框架不支持它 并且可
  • 如何在禁用状态下更改 UIButton 图像 alpha?

    我有一个带有图像的 UIButton 在其禁用状态下 该图像应具有 0 3 alpha UIButton button UIButton buttonWithType UIButtonTypeCustom UIImage arrowImag
  • 检查 DOM 元素是否为复选框

    如何检查给定的 DOM 元素是否为复选框 设想 我有一组文本框和复选框 其中的值是动态分配的 我没有办法识别 DOM 元素是复选框还是文本框 只使用普通的 javascript 你就可以做到 if el type el type check
  • 从 C# 2.0 中的 dll 获取命名空间、类名

    我将动态获取dll 我需要加载 dll 并获取命名空间 类名来调用方法 方法名称是静态的 它将始终为 OnStart 基本上我需要通过加载 dll 来运行一个方法 有人可以帮忙吗 要加载程序集 您可以这样做 Assembly assembl
  • 具有委托和条件的 Active Record

    是否可以在 Active Record 模型中使用委托并使用诸如 if on it class User lt ApplicationRecord delegate company to gt master if gt has master
  • GENERATE_SOURCEMAP=false,但仍然生成源代码

    我想在生产中隐藏 ReactJS 源代码 因此 在网上搜索一些信息使我找到了添加的简单解决方案 set GENERATE SOURCEMAP false react scripts build 到构建配置文件 This https stac
  • 将时间舍入到最接近的三十秒

    我有一个应用程序 它显示每 30 秒过期的数据 准确地说 在 h m s 11 30 00 11 30 30 11 31 00 等 我可以获得当前时间 但我不确定如何计算现在到最近的三十秒之间的时间 我发现的所有内容都是 Objective
  • 在 Rmarkdown 中将标题拆分为两行以进行单词输出

    我见过各种适用于 pdf 和 HTML 文档输出的解决方案 然而 没有一个对我的文字输出有用 使用时 正如这里所建议的 将标题拆分为多行 https stackoverflow com questions 30537515 split th
  • Google 饼图未显示所有数据行

    我正在尝试绘制人口与国家名称的关系图 我发现 Google 可视化库仅渲染前几个 实际上数字似乎是随机的 具体取决于我使用的数据 有时添加 其他 条目 但它没有t 实际上具有其余条目的值 Example 1 With all countri
  • 在 TCPDF 中设置背景颜色

    我已经手动设置了第一页的背景颜色 如下所示 pdf gt AddPage pdf gt SetFillColor 52 21 0 76 pdf gt Rect 0 0 pdf gt getPageWidth pdf gt getPageHe
  • 如何检查c#代码中死锁的可能性

    我的应用程序有时会停止在下面的代码中 并非总是如此 但有时会停止 全部3种方法CalcQuarterlyFigures CalcWeeklyFigures CalcMonthlyFigures return Task
  • 当更改提交给子模块时,如何触发詹金斯中的构建?

    我们有一个带有外部子模块的 git 存储库 当子模块更改时 我们必须触发构建 您能否向我们建议如何使用 xtrigger 插件轮询子模块上的更改 使用 shell 脚本或监视文件还是其他更好 有关我们构建过程的更多信息 步骤1 使用子模块克
  • 通过sequelize.query() 插入原始查询时不会触发挂钩

    我有以下内容EmployeeMySQL 数据库模型 var bcrypt require bcrypt module exports sequelize DataTypes gt const Employee sequelize defin
  • 通知用户消息仍在输入中

    我正在使用 Laravel 5 6 7 Socket IO 和 vue js 我没有使用 Pusher 和 redis 下面是我的代码 用于向与我一对一聊天的用户发送消息 var url http localhost 6001 apps M