Здравствуйте!
есть проблема...похоже с синхронизацией worker`ов.
привожу код клиента:
var workers = [];
for (var i = 0; i < 3; i++) {
var worker = new Worker('/myscript');
worker.onmessage = function (data) {
console.log(data);
}
}
for (var g = 0; g < worker.length; g++) {
workers[g].postMessage('start');
}
и код файла myscript, то есть код worker`а:
var myWorker = (function (workerWindow) {
var myWorker = function () {
this.initEvents();
};
myWorker.prototype.log = function (message) {
workerWindow.postMessage(message);
};
myWorker.prototype.get = function () {
var XmlHttp = new XMLHttpRequest();
XmlHttp.open('GET', myURL, false);
XmlHttp.send(null);
if (XmlHttp.status == 200) {
var packet = JSON.parse(XmlHttp.responseText);
this.log('packet id: ' + packet.id);
}
};
myWorker.prototype.initEvents = function () {
var self = this;
workerWindow.addEventListener('message', function () {
self.get();
})
};
}(this));
var ww = new myWorker(this);
В этом коде 3 воркера должны отправить запрос на сервер, получить ответ числом(изначально 0, инкрементится при каждом новом запросе на сервер) и вывести его. Вот только на сервер приходит всего 1 запрос, который и получают все 3 воркера, а вывод соответственно получатся такой:
packet id: 0
packet id: 0
packet id: 0
хотя по логике должно быть:
packet id: 0
packet id: 1
packet id: 2
думал, что дело может в том, что функция get находится в прототипе, однако если перенести ее в конструктор и убрать из прототипа ничего не меняется(
подскажите пожалуйста, где у меня тут ошибка?
Спасибо большое.