首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Peer.js在调用connection.send()之后断开连接?

为什么Peer.js在调用connection.send()之后断开连接?
EN

Stack Overflow用户
提问于 2020-03-30 02:39:35
回答 1查看 2.2K关注 0票数 1

我在做一个简单的双向交流网站。它使用Peer.js进行点对点浏览器通信.我从这个演示中获取了很多代码:https://jmcker.github.io/Peer-to-Peer-Cue-System/。问题是,在我调用sendMessage()在浏览器之间发送数据之后,浏览器就会断开连接。数据被发送了,我相信,但它从来没有收到,因为连接被切断了,只要我试图发送它。以下是主机设备的代码

代码语言:javascript
复制
var peer;
var lastPeerId;
var conn;

function initialize() {
    // Create own peer object with connection to shared PeerJS server
    peer = new Peer(null, {
        debug: 0
    });

    peer.on('open', function (id) {
        // Workaround for peer.reconnect deleting previous id
        if (peer.id === null) {
            console.log('Received null id from peer open');
            peer.id = lastPeerId;
        } else {
            lastPeerId = peer.id;
        }

        console.log("ID: " + peer.id);
        console.log("Awaiting connection.")
    });
    peer.on('connection', function (c) {
        // Allow only a single connection
        if (conn) {
            c.on('open', function () {
                c.send("Already connected to another client");
                setTimeout(function () {
                    c.close();
                }, 500);
            });
            return;
        }

        conn = c;
        console.log("Connected to: " + conn.peer);
        ready();
    });
    peer.on('disconnected', function () {
        console.log('Connection lost. Please reconnect');

        // Workaround for peer.reconnect deleting previous id
        peer.id = lastPeerId;
        peer._lastServerId = lastPeerId;
        peer.reconnect();
    });
    peer.on('close', function () {
        conn = null;
        console.log('Connection destroyed');
    });
    peer.on('error', function (err) {
        console.log(err);
    });
};

function ready() {
    conn.on('data', function (data) {
        console.log("Data recieved");
        console.log("Received: " + data);
    });
    conn.on('close', function () {
        console.log("Connection reset. Awaiting connection...");
        conn = null;
        //start(true);
    });
}

function sendMessage(message) {
    if (conn && conn.open) {
        conn.send(message);
        console.log("Sent: " + message);
    } else {
        console.log('Connection is closed');
    }
}

initialize();

这是连接设备(而不是主机)的代码

代码语言:javascript
复制
var peer;
var lastPeerId;
var conn;
//Get the ID specified in the address after the "?" sign
var idToConnectTo = window.location.href.split("?")[1];

function initialize() {
    // Create own peer object with connection to shared PeerJS server
    peer = new Peer(null, {
        debug: 0
    });

    peer.on('open', function (id) {
        // Workaround for peer.reconnect deleting previous id
        if (peer.id === null) {
            console.log('Received null id from peer open');
            peer.id = lastPeerId;
        } else {
            lastPeerId = peer.id;
        }

        console.log('ID: ' + peer.id);
        join();
    });
    peer.on('disconnected', function () {
        console.log('Connection lost. Please reconnect');

        // Workaround for peer.reconnect deleting previous id
        peer.id = lastPeerId;
        peer._lastServerId = lastPeerId;
        peer.reconnect();
    });
    peer.on('close', function () {
        conn = null;
        console.log('Connection destroyed');
    });
    peer.on('error', function (err) {
        console.log(err);
    });
};

function join() {
    // Close old connection
    if (conn) {
        conn.close();
    }

    // Create connection to destination peer specified in the input field
    conn = peer.connect(idToConnectTo, {
        reliable: true
    });

    conn.on('open', function () {
        console.log("Connected to: " + conn.peer);
    });

    // Handle incoming data
    conn.on('data', function (data) {
        console.log("Received: " + data);
    });
    conn.on('close', function () {
        console.log("Connection closed");
    });
};

function sendMessage(message) {
    if (conn && conn.open) {
        conn.send(message);
        console.log("Sent: " + message);
    } else {
        console.log('Connection is closed');
    }
}

initialize();

任何帮助都将不胜感激。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-03-30 02:43:34

我认为问题在于我试图在同一个浏览器的两个选项卡之间进行通信。当使用两种不同的浏览器时,它工作正常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60923292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档