Javascript 连接到websocket使webworker在Microsoft edge中不响应
所以这很奇怪,当我尝试连接到websocket时(这只是一个Microsoft边缘问题),它每秒钟刷新一次页面Javascript 连接到websocket使webworker在Microsoft edge中不响应,javascript,websocket,web-worker,Javascript,Websocket,Web Worker,所以这很奇怪,当我尝试连接到websocket时(这只是一个Microsoft边缘问题),它每秒钟刷新一次页面webworker都不会接受消息onMessage根本不会触发: 考虑以下几点: main.js var worker = new Worker("webworker.js"); worker.postMessage({ type: 'INIT_SOCKET' }); worker.addEventListener('message', (event) =&g
webworker
都不会接受消息onMessage
根本不会触发:
考虑以下几点:
main.js
var worker = new Worker("webworker.js");
worker.postMessage({ type: 'INIT_SOCKET' });
worker.addEventListener('message', (event) => {
let data = event.data;
if (typeof data === 'string') {
data = JSON.parse(data);
}
if (data.type === 'SOCKET_INITIALIZED') {
console.log('inititalized');
}
});
var io = require('socket.io-client');
var socket;
onmessage = function(event) {
var data = event.data;
console.log('got a event');
if (typeof data === 'string') {
data = JSON.parse(data);
}
switch (data.type) {
case 'INIT_SOCKET':
try {
socket = io('xxxx', { transports: [ 'websocket' ], secure: true }); // this line causes the error
socket.on('connect', function () {
postMessage({
type: Consts.SOCKET_INITIALIZED
});
});
} catch(e) {
console.log('some error ', e);
}
break;
};
};
webworker.js
var worker = new Worker("webworker.js");
worker.postMessage({ type: 'INIT_SOCKET' });
worker.addEventListener('message', (event) => {
let data = event.data;
if (typeof data === 'string') {
data = JSON.parse(data);
}
if (data.type === 'SOCKET_INITIALIZED') {
console.log('inititalized');
}
});
var io = require('socket.io-client');
var socket;
onmessage = function(event) {
var data = event.data;
console.log('got a event');
if (typeof data === 'string') {
data = JSON.parse(data);
}
switch (data.type) {
case 'INIT_SOCKET':
try {
socket = io('xxxx', { transports: [ 'websocket' ], secure: true }); // this line causes the error
socket.on('connect', function () {
postMessage({
type: Consts.SOCKET_INITIALIZED
});
});
} catch(e) {
console.log('some error ', e);
}
break;
};
};
require
似乎未在Worker
上下文中定义。用于将外部脚本导入专用WorkerGlobalScope。比如说
importScripts("socket.io.js");
无法确定如何停止轮询和获取错误的io()
调用,可能是由于404
错误
可能是因为不熟悉io()
是如何实现的。虽然能够在Worker
范围内定义Socket
对象
使用WebSocket
的方法返回预期结果
const worker = new Worker("webworker.js");
worker.addEventListener('message', (event) => {
let data = event.data;
if (typeof data === 'string') {
console.log(data)
}
if (data.type === 'SOCKET_INITIALIZED') {
console.log('inititalized');
}
});
worker.postMessage({
type: 'INIT_SOCKET'
});
plnkr在
连接
事件处理程序中此
是什么?我不确定您在哪里看到此
,但是如果您通常询问连接处理程序中的上下文是什么,它是处理程序还是窗口。我不确定这有什么关系。是否使用正确的上下文调用了postMessage
?检查数据的目的是什么?字符串是否作为消息传递到javascript
的一部分?您是否尝试调用worker.postMessage({type:'INIT_SOCKET'})代码>在附加消息之后
事件处理程序?是否定义了Consts.SOCKET\u INITIALIZED
?我提到的错误非常奇怪,因为它不一致,它只出现在每秒刷新一次的页面上,只出现在边缘上,并且只出现在包含连接到SOCKET的行时。不过,我会更仔细地尝试你的答案。另外,如果问题是require,则每次刷新页面时都会发生此错误。@netmeta注意,您没有尝试edge。无法重现具体问题。尽管WebSocket
似乎返回了铬的预期结果。该方法可能会进一步调整和改进以满足要求。若并没有在edge上进行测试,那个么你们的测试参数是错误的,你们的解决方案是无效的。由于这种情况也只发生在edge上,所以socket.io不是可选的。@NetMeta已经有一段时间没有使用ie、*indows了。回答时的javascript
是否未返回预期结果?应该删除帖子吗?