Node.js Can';t连接到Socket.io nodejs服务器

Node.js Can';t连接到Socket.io nodejs服务器,node.js,socket.io,Node.js,Socket.io,这是服务器的代码: var http = require('http'); var app = require('express')(); http = http.createServer(app).listen(3400,() => { var io = require('socket.io')(http); io.on('connection', (socket) => { console.log('connection'); }); }

这是服务器的代码:

var http = require('http');
var app = require('express')();

http = http.createServer(app).listen(3400,() => {
    var io = require('socket.io')(http);
    io.on('connection', (socket) => {
        console.log('connection');
    });
});
我正在使用Socket.io客户端测试工具:

当我输入地址
http://myWANIP:3400
当URL打开并点击connect时,不会发生任何事情

我做错了什么

非常感谢您的帮助

编辑:主机位于NAT后面,端口3400正在转发(TCP)

编辑2:在一些有用的注释之后,我将代码更改为:

var http = require('http');
var app = require('express')();

var server = http.createServer(app).listen(3400);

var io = require('socket.io')(server);

io.on('connection', (socket) => {
    console.log('connection');
});

第二个代码块看起来更合适。我们无法确定您的NAT和端口转发是否设置正确,但如果设置正确,则您应该能够通过以下方式从网页建立socket.io连接:

<script src="/socket.io/socket.io.js"></script>
<script>
const socket = io("http://myWANIP:3400", {transports: ["webSocket"]});
</script>

然后,当你到达
http://myWANIP:3400
,在浏览器中,您应该在服务器上获得一个日志,并返回一个回复页面,上面写着“您好”。

请编辑您的问题,在此处包含有关网络设置的相关信息。脚本托管在哪里?是NAT背后的那个主持人吗?NAT/端口转发配置是否正确?@esqew是主机位于NAT后面。端口正在转发。请不要使用相同的
http
变量来表示多个内容。这只是混乱和糟糕的编码。
http.createServer()
的结果是一个服务器对象,该变量的名称应类似于
server
。执行
http://myWANIP:3400
因为您在该端口上的web服务器在接收到请求时不会执行任何可见的操作。您的代码被误导,试图在每个传入http请求上启动一个新的socket.io服务器。那是错误的。很难说正确的代码是什么,因为您没有描述您在这里真正想要完成的任务。如果您只是试图启动一个socket.io服务器,那么请从
http.createServer()
回调中删除该代码,使其处于顶层,并且在服务器启动时只调用一次。@jfriend00我将其更改为
var server=http.createServer…
我添加了GET请求处理程序,并且可以看到“hello”在我的浏览器中。但我仍然无法获得socket.io连接。我需要在该端口上转发更多的TCP吗?其次,
将要求socketio客户端出现在该服务器上,而不仅仅是index.html文件中,对吗?由于我计划在颤振应用程序中使用dart客户端,因此我尝试使用该客户端,但仍然未能触发连接事件。
标记客户端示例假定您是从web服务器提供的网页进行连接的。socket.io客户端由任何socket.io服务器自动提供服务。如果不是这样(您是从其他类型的客户机连接的),那么您显然会使用其他客户机进行连接。
app.get("/", (req, res) => {
     console.log("got web page request");
     res.send("hello");
});