如何使用 Websocket 发送旧消息

2023-12-23

我有一个有效的 Websockets 示例,其中客户端从服务器接收消息。

我不确定当客户端连接时应该如何向客户端发送旧消息。

Example:

  • 每个客户端在连接时提供他们的名字
  • 服务器响应“[名称]刚刚连接”(对所有客户端)
  • 任何新客户都不会收到这些消息

我想知道客户端是否可以通过任何方式接收旧消息(所有消息或最近 5 分钟内的消息都可以接受)。

我怀疑我可能必须自己捕获这些信息,将其存储在某个地方(例如数据库),然后自己将消息发送给新客户。是这样吗,还是我错过了什么?

如果有人有伪代码,或者其他人如何实现这一点的示例的链接,那会很方便。


你可以这样做:

  1. 每条消息都应该有一个 id ->muid (消息唯一ID)
  2. 每次客户端发送一条消息时,它都会从服务器获得一个 ACK​​ 以及muid对于已发送的消息。
  3. 服务器端每次收到新消息时,muid被分配,与 ACK 一起发送,并且还与消息一起发送给每个连接的用户。这样,视图将能够在某个时间点为每个用户呈现相同的序列。
  4. Each time a new user connects it sends the last muid it has received so the server knows where this user stopped receiving messages. The server could then send as many old messages as you want, depending on the kind of storage you implement:
    1. 完整历史:我会推荐具有适当索引的数据库存储
    2. 最后 N 条消息:根据 N 的大小,您可以简单地将最后 N 条消息存储在固定大小的数组中,并在每次重新连接时发送全部或所需的块。请记住,这会消耗内存,因此,存储 1024 个不同聊天的最后 1024 条消息会占用相当多的内存,特别是如果消息的大小不受限制。

希望能帮助到你

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Websocket 发送旧消息 的相关文章

  • Vue 3 Composition API 提供/注入在单文件组件中不起作用

    我正在使用 Composition API 在 VueJS 3 中创建一个库 我实现了提供 注入 如中所述docs https v3 vuejs org guide composition api provide inject html i
  • 位置特征检测:固定

    我正在尝试找到一个脚本来检测设备是否放置position fixed元素相对于视口而不是整个文档 目前 标准桌面浏览器和 Mobile Safari 适用于 iOS 5 都是这样做的 而 Android 设备则相对于整个文档放置固定元素 我
  • 在版本 4.4.6 中禁用 ckeditor 上下文菜单

    我在 Rails4 项目中使用 ckeditor 我尝试了 ckeditor gem 和 ckeditor rails gem 来提供 ckeditor 库 这里有多个帖子 人们希望删除 ckeditor 上下文菜单 以便可以显示本机浏览器
  • 通过 JavaScript 获取表单名称

    我有一个简单的问题 但我在网上找不到好的解决方案 我有这个 HTML 代码
  • 如何在网站上使用 svg 元素制作块的屏幕截图?

    我在网站上创建了一个构造函数 其本质是将所选元素及其颜色 svg中的元素 添加到访问者选择的背景和背景颜色 png中的背景 中 然后必须单击 保存 结果 按钮并仅执行工作区的屏幕截图 我写了这个脚本 但它需要屏幕截图 但只有背景 并忽略选定
  • 导航栏下拉菜单(折叠)在 Bootstrap 5 中不起作用

    我在尝试使用以下命令创建响应式菜单或下拉按钮时遇到问题Bootstrap 5一切似乎都正常 导航图标和下拉图标出现 但它不起作用 当我单击nav图标或dropdown按钮 无dropdown menu apears 我想特别提到的是 我还包
  • 如何通过单击链接来更改 div 的内容?

    这是我的网页的 修改后的 jsfiddle 它还有很多 而且定位是正确的 与此相反 http jsfiddle net ry0tec3p 1 http jsfiddle net ry0tec3p 1 a href class btn1 st
  • JavaScript推送函数中的动态变量

    我在 JavaScript 中使用推送功能 var chartData for var i 0 i lt 3 i chartData push date new Date year s mon s date s hr s min s sec
  • IE 中的 XPath 查询使用从零开始的索引,但 W3C 规范是从一开始的。我应该如何处理差异?

    问题 我正在转换目前仅适用于 Internet Explorer 的相对较大的 Javascript 代码 以便使其也适用于其他浏览器 由于代码广泛使用 XPath 我们做了一些兼容性功能以使事情变得更容易 function selectN
  • 使用 JavaScript 移动页面上的按钮

    我的按钮可以移动 但奇怪的是 我无法弄清楚偏移是否有问题 我希望我的按钮随着鼠标光标移动 但现在它的移动方式不是我想要的 有时它会消失 另外 创建的新按钮是重叠的 我不知道如何解决这个问题并拥有更好的外观 var coorA var coo
  • 如何计算特定字符在字符串中出现的次数

    我正在尝试创建一个函数来查看数组中的任何字符是否在字符串中 如果是 有多少个 我尝试计算每一种模式 但是太多了 我尝试使用 Python 中的 in 运算符的替代方案 但效果不佳 function calc fit element var
  • 改变 JavaScript 中的顶部填充

    以下是我在 css 中设置顶部填充的方法 body font size font size px margin 0 padding 100px 0 20px 0 width 100 important 如何使用最简单的 javascript
  • LeafleteachLayer函数不会迭代所有Layer

    使用 GeoJSON 数据数组创建一些标记 getJSON GetLocationsServlet function data L geoJSON data onEachFeature onEachFeature addTo mymap G
  • 聆听 Angular 2 中的元素可见性

    我正在为我的网络应用程序使用 Bootstrap 和 Angular 2 v4 我想监听指令中的元素以了解可见性变化 我的元素有一个可以隐藏其子元素的父元素hidden sm up我需要在每次隐藏或显示时触发一个函数 div hidden
  • 如何使用 JavaScript 或 jQuery 克隆 HTML 元素的样式对象?

    我正在尝试克隆元素的样式对象 这应该允许我在更改后重置所述元素的样式 例如 el style left 50px curr style left 50px Modify the elements style The cloned style
  • 如何从浏览器向服务器发送“页面将关闭”消息?

    我想向每个 html 文档添加一个脚本 JavaScript 该脚本向服务器发送两条消息 页面确实打开了 页面将关闭 此消息包含页面打开的时间 打开消息应在文档加载时 或加载完成时 发送 这是简单的部分 The close message
  • 使用javascript动态更新css内容

    需要将 css 更新为动态值 我不确定最好的方法是什么 div style zoom 1 div 缩放级别将根据窗口大小调整触发 应用程序将相应缩放 我将此应用程序加载到 cordova 中并让它在 iPAD 中运行 然后我意识到需要使用
  • 使用 next.js 进行服务器端渲染与传统 SSR

    我非常习惯 SSR 意味着页面得到完全刷新并从服务器接收完整 HTML 的方法 其中根据后端堆栈使用 razor pub other 进行渲染 因此 每次用户单击导航链接时 它只会向服务器发送请求 整个页面将刷新 接收新的 HTML 这就是
  • 如何从 json 文件创建模型? (ExtJS)

    这是我想使用 json 文件创建的模型 Ext define Users extend Ext data Model fields name user id type int name user name type string 为了根据服
  • 使用velocity.js制作可拖动元素的动画

    我正在使用velocity js 为用户拖动的可拖动 SVG 元素设置动画 然而 velocity js 将先前的 mousemove 坐标排队并通过所有后续的 mousemove 坐标进行动画处理 我想要的是velocity js 不要对

随机推荐

  • C#:向二进制文件写入和读取列表

    我写了一个程序 有一个User类 保存到文件中以存储用户信息 但是 可能有多个不同的用户 因此不是将文件保存为单个用户 而是将文件保存为用户列表 这是在 XNA 中 因此是一个游戏 但这实际上不会对事情产生任何影响 用户拥有硬币 皮肤 库存
  • 在c++中嵌入python:选择python版本

    我已经寻找问题的答案很长一段时间了 但我找到的答案似乎都不能解决我的问题 我正在尝试使用 Python 提供的功能 Python h Py xxx 函数等 将 Python 嵌入到我的 C 代码中 但是 我在让我的 C 程序调用正确的 Py
  • 如何在实体框架代码优先数据库中手动设置实体主键?

    好吧 我有以下模型结构 我有一个类 DatabaseEntity这基本上是 public class DatabaseEntity public int Id get set 所以每个实体 如产品 类别等 都会继承DatabaseEntit
  • 在 Linux 上用 C++ 移动鼠标指针失败

    我使用以下代码来隐藏和显示鼠标光标 XDefineCursor m display m window show None m hiddenCursor XFlush m display 效果很好 但是 当我运行这个时 XWarpPointe
  • 如何将 Joomla recaptcha 插件与我的自定义模块一起使用?

    我为我的联系表格创建了一个自定义模块 现在我想在这个模块中使用 Joomla recaptcha 插件 知道如何完成这件事吗 为了使用 joomla 默认的 recaptcha 插件 请按照以下步骤操作 1 从以下位置获取验证码http w
  • WPF:如何根据 XAML 中另一个文本框的 Text 属性更改文本框的前景色?

    我想将 WPF 文本框的 Foreground 属性设置为红色 只要其 Text 属性与窗体上另一个文本框的 Text 属性不匹配 我可以在后台代码中并通过与转换器的绑定来完成此操作 但是有没有办法只用 XAML 来实现呢 我正在考虑某种触
  • SkipWhile 失败并显示“LINQ to Entities 无法识别该方法...”

    我找不到发生以下异常的原因 非常感谢任何帮助 EdcsEntities is derived from System Data Objects ObjectContext EdcsEntities db new EdcsEntities v
  • Tensorflow 对象检测 API 中的精确召回曲线

    有没有办法在 Tensorflow 对象检测 API 中可视化精确召回曲线 我知道 mAP 代表曲线下面积的绝对值 但我认为实际曲线更适合我的应用程序 我已经在 utils metrics 中找到了一些精度和召回值1 https githu
  • 在 QMenuBar 的另一侧堆叠 QPushButton

    我想堆一些QPushButton我另一边的物体QMenuBar This is how my window looks now And this is how I want it to look like I ve photoshopped
  • Laravel 没有 Eloquent 和数据库迁移?

    我已经是一名 PHP 程序员 12 年了 几乎多次重新发明轮子 为我们的闭源 Web 应用程序构建了自己的框架 该框架作为托管解决方案提供 为所有应用程序使用相同的共享数据库顾客 现在我正在尝试 Laravel 5 并注意到几乎每个示例都使
  • 如何从 PHP 执行 PhantomJS

    我想在本地主机上从 PHP 执行 PhantomJS 任何人都可以解释如何从 PHP 执行 PhantomJS 以及我应该从 phantomjs org 下载什么包 下载PhantomJS 二进制文件 http phantomjs org
  • for 循环中的 __getitem__ 调用

    我正在学习Python 但我什么都不懂 考虑这段代码 class Stack def init self self items def push self item self items append item def pop self r
  • 在两个数据库表中进行循环引用是一个好习惯吗

    在我们的数据库中 我们有两个表 A B 主键为 A id 和 B id 将 B id 作为表 A 中的外键 将 A id 作为表 B 中的外键是否被认为是一个好的做法 这将允许我们在表中拥有多对多关系 另一种方法是使用仅包含两列 A id
  • Hive Flutter 的权限和路径

    我目前正在构建一个应用程序 在其中存储数据并借助 flutter 包 hive 进行增删改查操作 所以我的问题是 我是否需要请求有关存储数据的权限 如果是 那么哪些权限以及存储数据的理想路径应该是什么 谢谢 对于 hive 您不需要添加任何
  • 在c中制作共享数据结构

    我在我的 C 程序中创建了一个数据结构 如下所示 typedef struct int array size t used size t size Array void initArray Array a size t initialSiz
  • 实时验证和复选框、单选、选择组

    Livevalidation 脚本非常适合验证表单 但您应该如何处理复选框 单选和选择组 参见网站 http www livevalidation com http www livevalidation com 这是可以做到的 尽管 Liv
  • 我该如何解决这个问题,res.json不是一个函数

    我的问题如下 我用 guzzle 发送数据 并收到错误 类型错误 res json 不是函数 client new GuzzleHttp Client response client gt request get http localhos
  • 引起:java.lang.NoClassDefFoundError:org/apache/log4j/Logger

    我有一个有趣的问题 在运行时找不到 org apache log4j Logger 类 我正在尝试获得授权 但这就是失败的地方 OAuthAuthorizer oauthAuthorizer new OAuthAuthorizer OAUT
  • 了解协程的执行

    我在 Unity 中工作 但这实际上只是一个 C 问题 所以我希望这是发布此问题的正确部分 无论如何 我仍然很难在脑海中想象脚本的执行情况 特别是当有多个脚本正在运行并且它们都有不同的功能时 最近它变得更加复杂 因为我将 Update Fi
  • 如何使用 Websocket 发送旧消息

    我有一个有效的 Websockets 示例 其中客户端从服务器接收消息 我不确定当客户端连接时应该如何向客户端发送旧消息 Example 每个客户端在连接时提供他们的名字 服务器响应 名称 刚刚连接 对所有客户端 任何新客户都不会收到这些消