将自定义方法分配给WebSocket时如何避免竞争情况?

法文

当我看着教程/约WebSockets的文档,我觉得像代码这样

var ws = new WebSocket("ws://localhost:8765/dlt");
ws.onopen = () => {
  // do some very important stuff after connection has been established
  console.log("onopen");
}

但是这里的比赛条件呢?是否有某种方式避免使用JavaScript?

例如,此代码(仅onopen 打开连接分配)将失败:

var ws = new WebSocket("ws://localhost:8765/dlt");
setTimeout(() => {
  ws.onopen = () => {
    // do some very important stuff after connection has been established
    console.log("onopen"); ///  <== won't be called
  }
}, 100);

可以确定在建立连接之前已经完成分配了吗?

(我尝试WebSocket使用自定义onopen()方法进行扩展但这似乎不起作用)

class MyWebSocket extends WebSocket {
  onopen() {
    console.log("onopen()");
    /// do some very important stuff after connection has been established
  }
}
马特·韦

您应该阅读有关javascript的事件循环的信息:https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/EventLoop#Event_loop

如果查看关于的部分Run-to-completion,则会得到以下有用的解释:

在处理任何其他消息之前,将完全处理每个消息。在推理程序时,这提供了一些不错的属性,包括以下事实:无论何时运行一个函数,都不能抢占它,并且会在其他任何代码运行之前完全运行(并且可以修改该函数操作的数据)。例如,这与C不同,在C中,如果函数在线程中运行,则运行时系统可能会在任何时候将其停止以在另一个线程中运行其他代码。

因此,在您的示例中,ws.onopen必须先完成对的分配,然后websocket才能执行任何本质上异步的操作。通过将您的分配放入setTimeout,您可以将其移到当前正在运行的上下文之外,因此在websocket要求它之前可能无法执行它。


但是,诚然,websocket api确实令人困惑,并且可以以更直观的方式进行设计。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将自定义函数调用分配给变量

来自分类Dev

在Kivy中将自定义方法分配给on_touch_down等

来自分类Dev

如何将自定义对象分配给bytesArray?3号

来自分类Dev

如何将自定义对象分配给bytesArray?3号

来自分类Dev

如何在设计时将自定义类分配给PropertyGridControl.SelectedObject

来自分类Dev

如何将自定义模型类型分配给淘汰赛 observable?

来自分类Dev

如何在Sitecore中将自定义配置文件分配给自定义域用户

来自分类Dev

将自定义HTML分配给page.content后,如何在PhantomJS中等待页面评估

来自分类Dev

分配给自定义 init 方法中的属性

来自分类Dev

无法将自定义类分配给Page View Controller

来自分类Dev

将自定义Wordpress帖子/页面元字段的值分配给JavaScript变量

来自分类Dev

SQL将自定义值分配给具有相似ID的那些行

来自分类Dev

将自定义角色分配给Azure Active Directory系统托管身份

来自分类Dev

将自定义对象分配给SSIS中的对象类型变量

来自分类Dev

在Notepad ++中将自定义扩展名分配给语言的语法突出显示

来自分类Dev

将自定义属性分配给动态生成的JS函数

来自分类Dev

C#,DataVisualization.Charting:将自定义标签分配给轴上的值

来自分类Dev

使用回调将自定义fomatter的值分配给jqgrid列

来自分类Dev

将自定义URL映射分配给JavaScript变量

来自分类Dev

将自定义 UIColor 分配给类属性的问题

来自分类Dev

将自定义字段价格作为产品价格分配给WooCommerce中的特定用户角色

来自分类Dev

将自定义子域分配给链接到s3存储桶的Cloudfront URL

来自分类Dev

如何在Typescript中定义自定义类型以防止“无法分配给类型...”

来自分类Dev

PHP高级自定义字段:仅在分配给页面时显示项目

来自分类Dev

将图标分配给自定义的模仿类型

来自分类Dev

自定义unix命令组合分配给变量

来自分类Dev

将图标分配给自定义的模仿类型

来自分类Dev

SuiteCRM如何创建类似于“分配给”字段的名为“引用人”的自定义字段?

来自分类Dev

如何通过Orchard CMS中的代码或配方将权限分配给自定义角色?

Related 相关文章

  1. 1

    将自定义函数调用分配给变量

  2. 2

    在Kivy中将自定义方法分配给on_touch_down等

  3. 3

    如何将自定义对象分配给bytesArray?3号

  4. 4

    如何将自定义对象分配给bytesArray?3号

  5. 5

    如何在设计时将自定义类分配给PropertyGridControl.SelectedObject

  6. 6

    如何将自定义模型类型分配给淘汰赛 observable?

  7. 7

    如何在Sitecore中将自定义配置文件分配给自定义域用户

  8. 8

    将自定义HTML分配给page.content后,如何在PhantomJS中等待页面评估

  9. 9

    分配给自定义 init 方法中的属性

  10. 10

    无法将自定义类分配给Page View Controller

  11. 11

    将自定义Wordpress帖子/页面元字段的值分配给JavaScript变量

  12. 12

    SQL将自定义值分配给具有相似ID的那些行

  13. 13

    将自定义角色分配给Azure Active Directory系统托管身份

  14. 14

    将自定义对象分配给SSIS中的对象类型变量

  15. 15

    在Notepad ++中将自定义扩展名分配给语言的语法突出显示

  16. 16

    将自定义属性分配给动态生成的JS函数

  17. 17

    C#,DataVisualization.Charting:将自定义标签分配给轴上的值

  18. 18

    使用回调将自定义fomatter的值分配给jqgrid列

  19. 19

    将自定义URL映射分配给JavaScript变量

  20. 20

    将自定义 UIColor 分配给类属性的问题

  21. 21

    将自定义字段价格作为产品价格分配给WooCommerce中的特定用户角色

  22. 22

    将自定义子域分配给链接到s3存储桶的Cloudfront URL

  23. 23

    如何在Typescript中定义自定义类型以防止“无法分配给类型...”

  24. 24

    PHP高级自定义字段:仅在分配给页面时显示项目

  25. 25

    将图标分配给自定义的模仿类型

  26. 26

    自定义unix命令组合分配给变量

  27. 27

    将图标分配给自定义的模仿类型

  28. 28

    SuiteCRM如何创建类似于“分配给”字段的名为“引用人”的自定义字段?

  29. 29

    如何通过Orchard CMS中的代码或配方将权限分配给自定义角色?

热门标签

归档