socket.io HTML5 SharedWorker 中的 Websocket 连接

socket.io Websocket connection inside a HTML5 SharedWorker

希望你们一切都好。我正在尝试使用 worker.js 文件内部建立与 socket.io 服务器的连接importScripts 加载与 worker.js 在同一目录中的 socket.io-client js 文件。加载 socket.io-client 后 通过使用 var socket = io.connect('http://38.98.xxx.xxx:6000');我正在尝试与不同主机上的 socket.io 服务器建立连接,但无法正常工作。请给我正确的指出direction.I感谢任何帮助。

    <script>
    var worker = new SharedWorker("http://baseUrl.com/js/push/worker/worker.js");

    worker.port.addEventListener("message", function(e) {
        console.log("Got message: " + e.data);
    }, false);
    worker.port.start();
    worker.port.postMessage("start");

</script>

worker.js

importScripts('socket.io.js');

var socket = io.connect('http://38.98.154.167:6000');

var connections = 0;

self.addEventListener("connect", function(e) {
    var port = e.ports[0];
    connections ++;
    port.addEventListener("message", function(e) {
        if (e.data === "start") {

            port.postMessage('hello');
        }
    }, false);
    port.start();
}, false);


socket.on('connect', function () {
    port.postMessage('connect');
});

socket.on('disconnect', function () {
    port.postMessage('disconnect');
});

我明白了。只是不得不移动

socket.on('connect', function () {
    port.postMessage('connect');
});

socket.on('disconnect', function () {
    port.postMessage('disconnect');
});

worker.js 中的 self.addEventListener("connect", function(e) {}); 并从 var socket=io.connect('http://38.98.xxx.xxx:6000'); 更改 到

var socket = io('http://38.98.xxx.xxx:6000');

如果有人需要,这里是工作示例。

worker.js

  importScripts('socket.io.js');

var socket = io('http://38.98.xxx.xxx:6000');

var connections = 0;

self.addEventListener("connect", function(e) {
    var port = e.ports[0];
    connections ++;
    port.addEventListener("message", function(e) {
        if (e.data === "start") {

            port.postMessage('hello');
        }
    }, false);
    port.start();

    socket.on('push', function(pushed){

        port.postMessage(pushed);
    });


    socket.on('connect', function () {
        port.postMessage('connect');
    });

    socket.on('disconnect', function () {
        port.postMessage('disconnect');
    });

}, false);

const io = require('socket.io-client');

的替代品有所减少

它在专用网络工作者中为返回的套接字运行连接。是

const io = require('sockerworker.io');
const socket = io([url][, options]);

您可以使用它,而不是为网络工作者编写自己的样板。它可以通过 npm here 获得。 (披露:我是它的作者。)