BroadcastChannel doesn't fill in useful MessageEvent fields like source, or ports
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- JavaScript
- Star
- 122k
- Fork
- 37.3k
- Merge trung bình
- 4 ngày 2 giờ
- Pull request đã merge (30 ngày)
- 283
Mô tả
Please populate the Worker value in BroadcastChannel MessageEvents 'source' field the same way it is in WebWorkers.
There is currently no mechanism to compose Workers in the NodeJS APIs and this change would provide a mechanism to
solve that problem, if not for the general case, at least with only a small amount of additional bookkeeping on the part of
application developers.
Without a composition mechanism, it is extremely difficult to implement cross-cutting concerns between workers, and between workers and large subsystems in the main application. Which is problematic for many areas of production code including caching, telemetry, reloadable configuration, and security.
Fundamentally, there is no mechanism to tell if a Worker has terminated. And since Workers tend to be used for tasks with high utilization of the event toop, even sending a message to ask if anyone is still listening to the BroadcastChannel is not guaranteed to work on any reasonable time frame, and in particular for cross-cutting concerns who can't know what, for instance, the cutoff time is for image processing in the Image Worker, and that the Cache Worker has a cutoff of 1/100th of that time. Which then leads to a scenario where you've decided a Worker is dead and then the same worker pops back up 10 seconds later. What you need is worker.on('exit') which is unambiguous.
Version
All versions
Platform
All Platforms
Subsystem
node:worker_threads
What steps will reproduce the bug?
const util = require('util');
const channel = new BroadcastChannel('example');
if (isMainThread) {
channel.addEventListener('message', evt => {
console.log(util.inspect(evt)); // breakpoint here
});
} else {
channel.postMessage('hello');
}
The Message Event recieved looks like
MessageEvent {
type: 'message',
defaultPrevented: false,
cancelable: false,
timeStamp: 444.018666
}
How often does it reproduce? Is there a required condition?
Always. Seems to be by design, and the design may have drifted from the current web standards over time.
What is the expected behavior? Why is that the expected behavior?
That I get a Worker object to facilitate lifecycle management and IPC coordination.
What do you see instead?
empty string, empty array. And no other mechanism in the Node API to interrogate the running isolates to find this information.
Additional information
No response
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu tại điểm vào node:worker_threads BroadcastChannel và tái hiện đầu ra MessageEvent từ ví dụ được cung cấp. So sánh các trường source và ports của nó với hành vi WebWorkers được mô tả trong issue, sau đó xác minh rằng sự kiện kết quả cung cấp thông tin Worker được yêu cầu và hành vi điều phối vòng đời.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- javascript, node.js
- Lĩnh vực
- api, backend
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Sôi nổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 48/100