问题标签 [message-channel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
797 浏览

javascript - 将可转移对象与共享工作者一起使用

在我的共享工作者中使用可转移对象时,我在主线程中收到nullevent.data经过一番搜索,我发现这篇文章解释说ArrayBuffer当它通过 a 时总是MessagePort丢失MessageChannel

共享工作者通信也使用端口和消息通道完成。这是否意味着无法在SharedWorker实例中使用可转移对象?还是有一些解决方法?

我需要将一个巨大string的从SharedWorkerGlobalScope回传输到主线程。想法是将其转换ArrayBuffer为如本例所示的,然后传输缓冲区。据说这比发送字符串要快得多......

发送数据:

接收数据:

0 投票
1 回答
1848 浏览

javascript - 卡在 postMessage 和 MessageChannel

我对postMessageand感到困惑MessageChannel

以下是来自MDN的一些代码:

我认为postMessage方法只能接受两个参数,上面的代码表明它可以接受三个,但是方法的第三个参数什么都没有postMessage

所以有我的问题:

  1. 方法的第三个参数是什么意思postMessage

  2. 我知道 的用法MessageChannel,但它似乎没用,我们为什么/何时应该使用 MessageChannel?

0 投票
1 回答
534 浏览

javascript - Service Worker 从另一个 Worker 获取数据后响应 Fetch

我正在使用服务工作人员为我拦截请求,并通过与 Web 工作人员(也从同一父页面创建)通信来提供对获取请求的响应。我使用消息通道在工作人员和服务人员之间进行直接通信。这是我写的一个简单的 POC:

端口的作用:

otherPort : 与工作人员的通信

parentPort : 与父页面通信

在工人中,我有一个数据库这样说:

Worker 只是根据 Service Worker 发送的密钥提供正确的数据。实际上,这些将是非常大的文件。

我面临的问题如下:

  1. 由于我使用的是全局 dummyObj,因此旧的 dummyObj 以及旧的 onmessage 都会丢失,并且只有最新的资源会用接收到的数据进行响应。
  2. 实际上,file2 得到This is File1了 ,因为最新的 dummyObj 是为 file2.txt 的,但工作人员首先为 file1.txt 发送数据。

我尝试通过直接创建 iframe 并拦截其中的所有请求:

这是我得到的输出: 在此处输入图像描述

一种方法是在创建 iframe 之前将所有可以提取到工作程序中的 IndexedDB 的文件写入。然后在 Service Worker 中从索引数据库中获取那些。但我不想将所有资源都保存在 IDB 中。所以这种方法不是我想要的。

有人知道以其他方式完成我想做的事情的方法吗?或者有没有解决我正在做的事情。

请帮忙!

更新

我通过在全局队列中排队 dummyObjs 而不是拥有全局对象来实现这一点。在收到来自工作人员的响应后,msgFromW我从队列中弹出一个元素并调用它的callHandler函数。但我不确定这是否是一个可靠的解决方案。因为它假设一切都会按顺序发生。这个假设正确吗?

0 投票
2 回答
2711 浏览

spring-boot - 无法在 Spring 集成中自动装配 MessageChannel

我正在尝试使用 spring 集成的 FTP 文件上传和下载示例。我想手动将文件上传到 outputChannel。当 inputChannel 发生变化时,我不想调用它。因此,FTPApplication 应该只有一个 outputChannel bean 的声明。为此,我参考了这篇文章使用spring spring将文件直接上传到ftp服务器中的特定文件夹(仅用于手动上传,这种方式在大多数页面中都很常见)。以下是 Spring Boot 应用程序代码:

控制器代码如下图:

当我运行应用程序时,我收到以下错误:

请帮助解决这个问题。

0 投票
1 回答
415 浏览

spring - 通过 TCP 发送字节时出错:意外消息 - 没有向连接拦截器注册端点

我正在尝试使用 DSL 将应用程序中的 integration.xml 重写为 Java Config。我的集成流程是这样的:

  1. Communication对象来到sendCommunication通道
  2. sendCommunication通道被路由到两个不同的通道
  3. 每个通道中的对象都转换为byte[]
  4. 使用自定义记录器记录数据(窃听)
  5. TcpSendingMessageHandler来自每个通道的字节使用两个不同的 s通过 TCP 发送

这是与此流程相关的我的 Integration.java 的一部分(跳过了一些像自定义记录器这样的 bean):

当我尝试通过sendCommunication通道发送数据时出现此错误(故意隐藏 IP):

2016-10-09 19:52:45 WARN TcpNetConnection:186 - 意外消息 - 没有使用连接拦截器注册的端点: IP端口:37007:b2347dad-b65c-4686-b016-5ef5ee613bd5 - GenericMessage [payload=byte[267],标头={ip_tcp_remotePort=端口,ip_connectionId= IP端口:37007:b2347dad-b65c-4686-b016-5ef5ee613bd5,ip_localInetAddress=/本地 IP ip_address= IP,id=c6fb70b1-6d06-a909-cfc4-4eac7,, 时间戳=1476035565330}]

我很感激任何帮助,这个错误从昨天开始就让我头疼。我自己找不到任何解释,谷歌在 github 上只给了我这个源代码。

0 投票
1 回答
1477 浏览

spring - Spring Splitter 输出到多个通道

我正在使用拆分器拆分消息并将其传递到相应的其他通道以进行进一步处理。

但我想将分离器输出发送到一个通道,该通道会将其写入另一个文件。还想将分离器输出发送到另一个将执行某些任务的通道。

我可以使用下面的方法来做同样的事情,但如果无法处理通道 2 中的任何拆分记录,它似乎不起作用。它停止该过程并且不在通道1中写入剩余记录。

有没有其他方法可以独立地将它传递给单独的通道。

0 投票
1 回答
279 浏览

ms-office - window.opener 在 Excel for Windows 中不起作用

我已经构建了一个 Excel 加载项,它打开一个弹出窗口window.open,然后加载项与弹出站点进行通信。我刚刚意识到它在 Excel for Windows 中不起作用,原因是弹出窗口无法通过$window.opener.

为了说明这一点并避免跨域,我做了一个 xml,它指的是加载项测试页面。它在 Chrome 和 IE 中的 Excel Online 中运行良好。但是,在 Excel for Windows 中运行它时,会$window.opener返回undefined.

谁能告诉我发生了什么,解决方法是什么?

(对于推荐 Dialog API 的人,请参阅此线程。所以现在 Dialog 和window.openExcel for Windows 都不起作用)。

0 投票
1 回答
602 浏览

spring - 不允许空关联。也许 CorrelationStrategy 失败了?

我正在使用spring集成,并且我正在使用默认的关联策略,也就是说我没有明确地为关联策略编写代码,在拆分器之前一切正常,在拆分器之后有一个服务激活器进行一些处理然后放置消息进入聚合器必须从中选择它的通道,但聚合器不选择它,所以我放置了一个拦截器以找出发生了什么,并发现在将消息放入聚合器通道之前,聚合相关的标头,如相关性id 等存在,但是一旦将其放入频道,标题就会丢失。现在我不确定为什么聚合器或之前的频道会丢失标题。任何帮助将不胜感激。

更新:-我使用一个spliier然后是激活器,然后是另一个拆分器,然后是一个激活器,然后是一个聚合器,然后是另一个聚合器......下面的代码用于内部拆分器和聚合器组合

0 投票
1 回答
1707 浏览

java - MessageDeliveryException:调度程序没有订阅者

我正在尝试在我公司的项目中使用 spring-integration-kafka-2.1.0.RELEASE。但是,由于下面列出的异常,它不起作用: org.springframework.messaging.MessageDeliveryException:调度程序没有订阅者对于通道'org.springframework.web.context.WebApplicationContext:/order.inputToKafka'。; 嵌套异常是 org.springframework.integration.MessageDispatchingException: Dispatcher 没有订阅者。

xml配置如下:ctx-kafka-producer.xml:

ctx-kafka-consumer.xml:

消费者通过使用依赖属性在生产者之前初始化。

Java代码如下:

制片人:

生产者通过以下方式定义为 bean:

消费者 Java 代码:

我不知道发生异常的原因。

我应该怎么做才能让它工作?

PS:我正在尝试通过xml而不是@Bean之类的JavaCode来配置它。

原谅我糟糕的英语TAT
…………

非常感谢..

0 投票
0 回答
760 浏览

javascript - 为什么 MessageChannel 永远阻塞而客户端永远不会收到消息?

我有一个问题,我MessageChannel没有从服务人员向客户发送消息。为什么 MessageChannel 永远阻塞而客户端永远不会收到消息?

在 sw onfetch事件中我创建了一个MessageChannel然后我做postMessage,但是客户端永远不会被addEventListener('message'解雇,为什么?

对于服务人员,我创建了这样的方法:

在客户端上,我希望在这里收到消息:

但我从来没有在客户端收到消息,如果没有超时,它将永远保持 w8。

更新

我试过的:

我得到的唯一日志是:

导航到http://localhost:3000/ navigator.serviceWorker.ready

ServiceWorker 注册成功,范围:

http://localhost:3000/