Socket.io连接无法正常工作

时间:2017-03-03 08:38:23

标签: javascript node.js sockets socket.io

我正在尝试在 localhost 上构建一个简单的 socket.io 连接,但它无效。

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

服务器运行正常但我没有在终端和浏览器的控制台中看到数据。

我做错了吗?

这是我的代码:

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

3 个答案:

答案 0 :(得分:2)

socket.io库旨在与node.js服务器协同工作,因此连接所来自的页面需要能够被服务器识别(通过路由)。否则,它怎么能发回去?如果将express.static语句更改为 var1="7.6.0" var2="7.1.0" awk -v var1="$var1" -v var2="$var2" 'BEGIN{ if(var1 > var2) {print "higher"} else {print "lower"}}' higher ,您将获得一个允许库正确执行其操作的自动路由。值得注意的是,如果您使用此页面,以后在加载页面时,您需要点击基本网址(即app.use(express.static('/opt/lampp/htdocs/testproject/'));localhost:8080/)。如果您更改文件名,请使用localhost:8080/index.html

在socket.js中:

localhost:8080/newfilename.html

答案 1 :(得分:1)

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

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

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

据我所知,在连接时,您不需要在客户端js上提及主机名。 E.g。

而不是

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

你可以这样做

 var socket = io.connect();

答案 2 :(得分:0)

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