Socket.io - 通过https从客户端连接到服务器

时间:2017-08-09 11:24:17

标签: javascript node.js socket.io

我在我的虚拟服务器(Ubuntu)上创建了一个socket.io聊天应用程序,该应用程序作为systemd服务运行并且正在运行。

我的server.js位于:

/var/www/vhosts/mywebpage.de/w1.mywebpage.de/chat/

server.js如下所示:

const io = require('socket.io')(3055);

io.on('connection', function(socket) {

    // When the client emits 'addUser', this listens and executes
    socket.on('addUser', function(username, room) {
        ...
    });

    // When the client emits 'sendMessage', this listens and executes
    socket.on('sendMessage', function(msg) {
        ...
    });

    // Disconnect the user
    socket.on('disconnectUser', function(username, room) {
        ...
    });

});

在我的网站(https)中,我尝试连接如下:

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script>

<script type="text/javascript">
    var loSocket;
    $(document).ready(function() {
        if(typeof(loSocket) == 'undefined') {
            loSocket = io('https://w1.mywebpage.de:3055', {
                reconnectionAttempts: 5,
                forceNew: true
            });
        }
    });
</script>

但我无法获得有效的连接。

开发人员工具说:

(failed) ERR_CONNECTION_CLOSED with initiator polling-xhr.js:264.

可能是什么错误?

1 个答案:

答案 0 :(得分:0)

根据我过去所做的,我将创建一个https服务器,该服务器提供SSL证书并使用您创建的https服务器创建套接字服务器,这将允许您通过https连接,您将需要在socketio(use this question as a ref

上启用secure
var app = require('http').createServer(handler)
var io = require('socket.io')(app);
var fs = require('fs');

app.listen(80);

function handler (req, res) {
    fs.readFile(__dirname + '/index.html',
    function (err, data) {
        if (err) {
            res.writeHead(500);
            return res.end('Error loading index.html');
        }

        res.writeHead(200);
        res.end(data);
    });
}

io.on('connection', function (socket) {
    socket.emit('news', { hello: 'world' });
    socket.on('my other event', function (data) {
        console.log(data);
    });
});

使用此代码作为参考,了解如何使用http创建socketio服务器 您可以在socket.io docs

上找到此代码

注意:您需要https而非http,如示例

中所示