【问题标题】:Client unable to connect to server with socket.io客户端无法使用 socket.io 连接到服务器
【发布时间】:2018-05-12 17:56:09
【问题描述】:

我无法从外部域连接到我的 node.js 服务器。它在通过节点使用 http Web 服务器在本地运行时工作正常,但是在外部连接时,它加载 socket.io.js 文件就好了,但是当尝试使用套接字时,它会从 URL 中删除端口并且无法连接。

而不是在网络请求中这样做:

http://external-domain.com:3000/socket.io/?EIO=3&transport=polling&t=M06GOUU

这样做:

http://external-domain.com/socket.io/?EIO=3&transport=polling&t=M06GOUU

我不确定如何使它不从连接中删除端口。我该如何解决这个问题?

服务器

const path = require('path');
const http = require('http');
const express = require('express');
const socketIO = require('socket.io');

const publicPath = path.join(__dirname, '../public');
var app = express();
var server = http.createServer(app);
var io = socketIO(server);

app.use(express.static(publicPath));

server.listen(3000, () => {
  console.log(`Server is up on port 3000`);
});

客户脚本标签

<script src="http://external-domain.com:3000/socket.io/socket.io.js"></script>

不同域上的客户端 JS

var socket = io();

socket.connect('http://external-domain.com:3000');

socket.on('connect', function () {
  console.log('Connected to server.');
});

【问题讨论】:

    标签: javascript node.js socket.io


    【解决方案1】:

    从此改变:

    var socket = io();
    socket.connect('http://external-domain.com:3000');
    

    仅此:

    var socket = io("http://external-domain.com:3000");
    

    而且,您不使用socket.connect(),因为您已经通过io("http://external-domain.com:3000"); 调用请求连接。


    说明

    代码:

    var socket = io();
    

    使用页面 URL 连接到该来源的 socket.io 服务器。这不是你想要的(显然)。

    如果你想使用.connect()方法,应该是这样的:

    var socket = io.connect("http://external-domain.com:3000");
    

    注意:var socket = io(url) 只是var socket = io.connect(url) 的快捷方式。

    socket.connect() 不接受 URL 作为参数,因此您根本没有正确使用它。它只是socket.open() 的同义词。

    【讨论】:

    • 哦,哇,好用,谢谢!只是好奇,这两者有什么区别?
    • @FirstLegion - 我的回答中添加了更多解释。
    【解决方案2】:

    使用 io.connect("url")

    var socket = io.connect("http://external-domain.com:3000", { rejectUnauthorized: false });
    

    // { rejectUnauthorized: false } 是可选参数。

    希望这对你有用。

    【讨论】:

    • 它被拒绝似乎不是问题,因为它只是没有找到正确的 URL。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    相关资源
    最近更新 更多