Nodejs中express结合socket.io,日志显示GET /socket.io/1/?t=1364198652158 404

Nodejs中express结合socket.io,日志显示GET /socket.io/1/?t=1364198652158 404

info - socket.io started Express server listening on port 3000 GET / 200 278ms - 470 GET /stylesheets/style.css 304 8ms GET /javascripts/jquery-1.7.1.min.js 304 5ms GET /javascripts/socket.io.js 304 15ms GET /javascripts/chat.js 304 25ms GET /socket.io/1/?t=1364198652158 404 2ms

app.js中是这样写的

io.sockets.on(‘connection’, function (socket) { console.log(‘connection’);


5 回复

Node.js 中 Express 结合 Socket.io 的问题分析

问题描述

在使用 Node.js 搭建的服务器中,当你尝试将 Express 和 Socket.io 集成时,可能会遇到如下的日志信息:

GET /socket.io/1/?t=1364198652158 404

这表示客户端请求 /socket.io/ 路径时,服务器返回了 404 错误,这意味着服务器没有正确处理这个请求。

解决方法

要解决这个问题,你需要确保在 Express 应用程序中正确配置了 Socket.io。以下是具体步骤和示例代码。

示例代码

首先,确保你已经安装了必要的依赖包:

npm install express socket.io

然后,在你的 app.js 文件中进行如下配置:

const express = require('express');
const http = require('http');
const socketIo = require('socket.io');

// 创建一个 Express 应用实例
const app = express();

// 创建 HTTP 服务器
const server = http.createServer(app);

// 将 HTTP 服务器与 Socket.io 绑定
const io = socketIo(server);

// 设置静态文件目录
app.use(express.static(__dirname + '/public'));

// 定义路由
app.get('/', (req, res) => {
    res.sendFile(__dirname + '/public/index.html');
});

// 监听连接事件
io.on('connection', (socket) => {
    console.log('A user connected');
    
    // 可以在这里添加更多的逻辑,例如监听特定事件
    socket.on('disconnect', () => {
        console.log('User disconnected');
    });
});

// 监听端口
server.listen(3000, () => {
    console.log('Express server listening on port 3000');
});

在这个例子中,我们创建了一个 Express 应用,并将其与 Socket.io 绑定。我们还设置了静态文件目录,以便客户端可以访问到 index.html 页面和其他静态资源。

静态文件目录

确保你有一个名为 public 的目录,并且其中包含以下文件:

  • index.html
  • style.css
  • jquery-1.7.1.min.js
  • socket.io.js
  • chat.js

public/index.html 可以包含如下内容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Socket.io Chat</title>
    <link rel="stylesheet" href="/stylesheets/style.css">
</head>
<body>
    <script src="/javascripts/jquery-1.7.1.min.js"></script>
    <script src="/socket.io/socket.io.js"></script>
    <script src="/javascripts/chat.js"></script>
</body>
</html>
总结

通过以上配置,你可以确保 Socket.io 能够正确地处理 /socket.io/ 路径的请求,避免出现 404 错误。确保所有静态文件路径正确,并且 Socket.io 服务器正确启动并监听指定端口。


同问~有没有哪位能解答一下~

把你的app.js这个文件发上来看看,估计是把 express 和 socket.iolisten 的顺序搞反了。

app.listen(app.get(‘port’), function(){ console.log("Express server listening on port " + app.get(‘port’)); });

要写成 var http = require(‘http’), server = http.createServer(app) io = require(‘socket.io’).listen(server); server.listen(8080);

根据你提供的信息,日志中的 404 错误表明客户端请求 /socket.io/1/ 路径时没有找到相应的资源。这通常是因为 socket.io 没有正确地集成到 express 应用程序中。

为了确保 socket.io 正确集成,你需要进行以下步骤:

  1. 安装必要的依赖

    npm install express socket.io
    
  2. 配置 socket.ioexpress: 确保你在 app.js 文件中正确配置了 socket.io

示例代码:

const express = require('express');
const http = require('http');
const socketIo = require('socket.io');

const app = express();
const server = http.createServer(app);

// 静态文件中间件
app.use(express.static(__dirname + '/public'));

server.listen(3000, () => {
  console.log('Express server listening on port 3000');
});

const io = socketIo(server);

io.on('connection', (socket) => {
  console.log('A user connected');
  // 可以在这里处理其他 socket 事件
});

在这个例子中,我们创建了一个 HTTP 服务器,并将其传递给 socket.io 实例。我们还使用 express.static 中间件来提供静态文件(例如 socket.io.js)。

HTML 示例

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Socket.IO Example</title>
  <script src="/socket.io/socket.io.js"></script>
  <script src="/javascripts/chat.js"></script>
</head>
<body>
  <h1>Socket.IO Example</h1>
</body>
</html>

确保你的 HTML 文件引用了正确的路径,比如 <script src="/socket.io/socket.io.js"></script>

通过以上配置,你应该能够解决 404 错误,并且看到日志中 A user connected 的输出。

回到顶部