繁体   English   中英

Socket.io 连接不工作

[英]Socket.io connection not working

我正在尝试在本地主机上建立一个简单的socket.io连接,但它不起作用。

我对代码的期望是,当我输入命令node socket.js时,它应该控制台“已连接”,同时在浏览器的控制台上(我已经在浏览器中打开index.html页面)我应该在控制台中看到“连接... ”和“要展示的东西”。 但它不起作用。

服务器运行良好,但我在终端和浏览器的控制台中都看不到数据。

难道我做错了什么?

这是我的代码:

索引.html

<html lang="en">
<head>
</head>
<body>
<script src="/socket.io/socket.io.js"></script>
<script>
    var socket = io.connect('http://127.0.0.1:8080');
    socket.on('connect', function(data) {
        console.log("Connected...");
        socket.on("message", function(data){
            console.log(data);
        });
    });
</script>
</body>
</html>

socket.js

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

var bodyParser = require('body-parser');
app.use(bodyParser.json({type: '*/*'}));
var server = require('http').createServer(app);

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

app.use(express.static('/opt/lampp/htdocs/testproject/node_modules'));

io.on('connection', function(client) {
    console.log("connected");
   client.emit("message", "Some thing to show");
});
server.listen(8080);

我的目录结构是这样的:

htdocs/testproject/

..node_modules/

..index.html

..socket.js

编辑:但是,当我在 socket.js 中添加它时,我的代码有效

app.get('/home', function(req, res,next) {  
    res.sendFile(__dirname + '/index.html');
});

socket.io库旨在与node.js服务器协同工作,因此连接所来自的页面需要能够被服务器识别(通过路由)。 否则,它怎么能发回去? 如果将express.static语句更改为app.use(express.static('/opt/lampp/htdocs/testproject/')); ,你将获得一个自动路线,使图书馆能够正确地完成它的工作。 值得注意的是,如果您使用此页面,将来在加载页面时需要访问基本URL(即localhost:8080/localhost:8080/index.html )。 如果更改文件名,请使用localhost:8080/newfilename.html

在socket.js中:

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

var bodyParser = require('body-parser');
app.use(bodyParser.json({type: '*/*'}));
var server = require('http').createServer(app);

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

app.use(express.static('/opt/lampp/htdocs/testproject/'));

io.on('connection', function(client) {
    console.log("connected");
   client.emit("message", "Some thing to show");
});
server.listen(8080);

我可以建议你在这里尝试一些事情。

首先请检查socket.io.js是否正确加载。

其次,首先启动服务器,然后点击http:// localhost:8080http://127.0.0.1:8080

另据我所知,连接时不需要在客户端js上提及主机名。 例如

而不是这个

 var socket = io.connect('http://127.0.0.1:8080');

你可以这样做

 var socket = io.connect();

由于启动节点应用程序之前打开选项卡,因此无法正常工作。 它将请求无法找到的socket.io.js文件,不会重新加载。 您需要在访问页面之前启动服务器,然后它应该工作。

运行服务器时应该使用options 否则,它不能正常工作。 这是我的一个项目的示例片段。

  init: (httpServer) => {
    const options = {
      cors: true,
      origins: ["http://localhost:8080/"],
    };

    io = require("socket.io")(httpServer, options);
    return io;
  },

在那之后,

    const server = app.listen(8080);
    const io = init(server);

    io.on("connection", (socket) => {
      console.log("client connected");
    });

    io.on("disconnect", (socket) => {
      console.log(`client disconnected`);
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM