Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 客户端无法使用socket.io连接到服务器_Javascript_Node.js_Socket.io - Fatal编程技术网

Javascript 客户端无法使用socket.io连接到服务器

Javascript 客户端无法使用socket.io连接到服务器,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我无法从外部域连接到node.js服务器。当通过节点使用http web服务器在本地运行时,它可以正常工作。但是,当外部连接时,它会加载socket.io.js文件,但当尝试使用socket时,它会从URL中删除端口,无法连接 而不是在网络请求中执行此操作: 它是这样做的: 我不知道如何使它不从连接中删除端口。我该如何着手解决这个问题 服务器 const path = require('path'); const http = require('http'); const express =

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

而不是在网络请求中执行此操作:

它是这样做的:

我不知道如何使它不从连接中删除端口。我该如何着手解决这个问题

服务器

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>
对此进行更改:

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)
的快捷方式

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

更改如下:

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)
的快捷方式

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

使用io.connect(“url”)

/{rejectUnauthorized:false}
是可选参数

希望这对您有用。

使用io.connect(“url”)

/{rejectUnauthorized:false}
是可选参数


希望这对你有用。

哦,哇,真有用,谢谢!只是好奇,这两者之间有什么区别?@FirstLegion-我的答案中添加了更多的解释。哦,哇,这很有效,谢谢!只是好奇,两者之间有什么区别?@FirstLegion-我的答案中添加了更多的解释。被拒绝似乎没有问题,因为它没有找到正确的URL。被拒绝似乎没有问题,因为它没有找到正确的URL。