在HTML5 SharedWorker中的socket.io Websocket连接

时间:2015-12-03 07:35:40

标签: websocket socket.io web-worker

我希望你们都做得很好。我正在尝试使用加载{{3}的 importScripts worker.js 文件内部与 socket.io 服务器建立连接} js文件与worker.js在同一目录中。加载socket.io-client后 通过使用var socket = io.connect('socket.io-client');我试图在不同的主机上建立与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');
});

2 个答案:

答案 0 :(得分:8)

我明白了。只需要移动

self.addEventListener("connect", function(e) {});

进入worker.js中的var socket=io.connect('http://38.98.xxx.xxx:6000');并从var socket = io('http://38.98.xxx.xxx:6000'); 更改 到

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

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

<强> worker.js

var wordApplication = new Word.Application();
wordApplication.Visible = true;
var wordDocument = wordApplication.Documents.Add();
var docRange = wordDocument.Range();
docRange.Tables.Add(docRange, 4, 1);
var mainTable = wordDocument.Tables[1];
mainTable.set_Style("Table Grid");
mainTable.Borders.Enable = 0;
mainTable.PreferredWidthType = Word.WdPreferredWidthType.wdPreferredWidthPercent;
mainTable.PreferredWidth = 100;
docRange.Collapse(Word.WdCollapseDirection.wdCollapseStart);

var phoneRange = mainTable.Cell(4, 1).Range;
phoneRange.Collapse(Word.WdCollapseDirection.wdCollapseStart);
phoneRange.Tables.Add(phoneRange, 3, 2);

var phoneTable = mainTable.Cell(4, 1).Tables[1];
phoneTable.set_Style("Table Grid");
phoneTable.Borders.Enable = 0;
phoneTable.AutoFitBehavior(Word.WdAutoFitBehavior.wdAutoFitContent);
phoneTable.Rows.RelativeHorizontalPosition = Word.WdRelativeHorizontalPosition.wdRelativeHorizontalPositionMargin;

phoneRange.Collapse(Word.WdCollapseDirection.wdCollapseEnd);

答案 1 :(得分:0)

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

在专用的Webworker中为返回的套接字运行连接。是

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

您可以使用它来代替为Webworker编写自己的样板。它可以通过npm here使用。 (披露:我是它的作者。)