首页 > 解决方案 > 无法连接到 Socket.io nodejs 服务器

问题描述

这是服务器的代码:

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 客户端测试工具:https ://amritb.github.io/socketio-client-tool/

当我输入地址http://myWANIP:3400作为 URL 并点击连接时,没有任何反应。

我究竟做错了什么?

非常感谢任何帮助:D

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

Edit2:经过一些有用的评论后,我将代码更改为:

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');
});

标签: node.jssocket.io

解决方案


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

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

并且,当该连接发生时,您应该会console.log('connection');在服务器日志中看到结果。

验证您的 NAT 和端口转发是否正常工作的另一种方法是将其添加到您的服务器:

app.get("/", (req, res) => {
     console.log("got web page request");
     res.send("hello");
});

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


推荐阅读