【问题标题】:socket.io Websocket connection inside a HTML5 SharedWorkerHTML5 SharedWorker 中的 socket.io Websocket 连接
【发布时间】:2016-03-07 17:26:57
【问题描述】:

我希望你们都做得很好。我正在尝试使用加载socket.io-client js 的 importScriptsworker.js 文件内部建立到 socket.io 服务器的连接与worker.js在同一目录中的文件。加载 socket.io-client 后 通过使用 var socket = io.connect('http://38.98.xxx.xxx:6000');我正在尝试与不同主机上的 socket.io 服务器建立连接,但它不起作用。请指出正确的方向。感谢您的帮助。

    <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');
});

【问题讨论】:

  • 我不确定(这就是为什么它是一个评论,而不是一个答案),但我很确定共享工作者中的 websockets 并没有为所有浏览器实现。最后我检查了一下,Firefox 在这方面遇到了重大问题……但祝你好运!
  • 嗨!神秘,感谢您的评论。我打算只在 Chrome 上使用它。

标签: websocket socket.io web-worker


【解决方案1】:

我想通了。只好搬家了

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);

【讨论】:

    【解决方案2】:

    const io = require('socket.io-client'); 的替代品有所下降

    它在一个专门的 webworker 中为返回的套接字运行连接。这是

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

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

    【讨论】:

      猜你喜欢
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 2012-12-07
      • 2021-12-15
      相关资源
      最近更新 更多