簡體   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