2015-09-05 15 views
5

Trang web của tôi tạo kết nối với luồng dữ liệu thời gian thực bằng cách sử dụng ổ cắm web. Luồng dữ liệu chỉ là một chuỗi tin nhắn JSON. Trong trình xử lý websocket, khi tôi nhận được một thông báo, tôi phân tích cú pháp JSON và thêm một số điểm dữ liệu vào biểu đồ.Có đặt một WebSocket trên WebWorker có ý nghĩa không?

Câu hỏi của tôi là: di chuyển websocket thành chuỗi công việc riêng của nó có ý nghĩa không?

Lúc đầu, tôi đã nghĩ rằng tôi có thể phân tích cú pháp JSON trên chuỗi riêng của nó và gửi chuỗi giao diện người dùng cho đối tượng được deserialized có thể tiết kiệm thời gian. Rất tiếc, có vẻ như postMessage yêu cầu tôi gửi chuỗi. Do đó không có lợi ích trong việc phân tích cú pháp JSON trên chuỗi riêng của nó. Nó cũng dường như không có bất kỳ lợi ích nào trong việc nhận dữ liệu ổ cắm web theo chủ đề riêng của nó - tôi muốn hình ảnh trình duyệt đã nhận dữ liệu từ dây trên sợi của chính nó và gửi javascript của tôi gọi lại vào thời điểm thích hợp. Vì vậy, với thực tế là không có bất kỳ xử lý bài đăng nào được thực hiện trên dữ liệu thời gian thực nhận được - nó chủ yếu là thẳng đến giao diện người dùng - có cần thiết để đặt kết nối websocket trên một nhân viên web không?

Cảm ơn! Andrew

+1

tương ứng IMHO nó sẽ chỉ có ý nghĩa nếu bạn đang làm có ý nghĩa (CPU nặng) xử lý về các thông điệp JSON trước khi gửi một số kết quả đặc trở lại chủ đề chính. – Alnitak

+1

Câu hỏi này quá rộng vì nó thực sự xảy ra trên số tiền bạn xử lý trên dữ liệu. Làm cho một công nhân bổ sung thêm chi phí, nhưng nếu bạn đang làm một số nén hoặc bất cứ điều gì, nó là tốt để làm điều đó trong công nhân. –

Trả lời

2

Một trường hợp mà tôi cần đặt xử lý websocket vào công nhân web là khi tôi cần tránh gián đoạn chuỗi trình duyệt ở các thời kỳ nhạy cảm (khi kết xuất âm thanh trực tuyến bằng API Web âm thanh được cấp từ máy chủ nút tùy chỉnh của tôi). Mỗi khi websocket trình duyệt nhận được một thông báo về dữ liệu âm thanh, nó sẽ làm gián đoạn quá trình xử lý trình duyệt, điều đó là tốt nếu ứng dụng của bạn không có khoảng thời gian nhạy cảm mở rộng như vậy. Bằng cách đặt quản lý websocket vào một webworker, tôi tránh làm gián đoạn vòng lặp sự kiện Web Audio API. Các webworker sẽ xử lý các dữ liệu websocket đến mà nó đưa vào một hàng đợi bên tròn webworker. Vòng lặp sự kiện Web Audio API bên trình duyệt sẽ nhấn vào hàng đợi được quản lý trên web này trong phần thời gian của vòng lặp sự kiện riêng của nó, do đó tránh bất kỳ sự gián đoạn nào đối với vòng lặp sự kiện.

Xem repo https://github.com/scottstensland/websockets-streaming-audio

Các vấn đề liên quan