[英]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:8080或http://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.