新手请教Nodejs socket.io问题
新手请教Nodejs socket.io问题
这是 app.js
var express = require('express');
var app = express(),
http = require('http'),
server = http.createServer(app),
io = require('socket.io').listen(server);
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
app.listen(8888);
console.log('daemon start on http://localhost:8888');
这是 index.html
<script src="/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:8888');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
在命令行发布 app.js
以后。控制台也显示了 :socket.io started
然后我在浏览器敲入: http://localhost:8888
却提示 io
未定义… 各们看倌,请问一下这是啥问题?
你遇到的“io
未定义”的问题是因为你的 HTML 文件中引用的 socket.io.js
路径不正确。你需要确保客户端能够正确地加载 socket.io.js
。
以下是修改后的代码:
修改后的 app.js
var express = require('express');
var app = express();
var http = require('http');
var server = http.createServer(app);
var io = require('socket.io')(server);
app.get('/', function (req, res) {
res.sendFile(__dirname + '/index.html');
});
io.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
server.listen(8888, function () {
console.log('Daemon started on http://localhost:8888');
});
修改后的 index.html
<!DOCTYPE html>
<html>
<head>
<title>Socket.IO Test</title>
</head>
<body>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:8888');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
</body>
</html>
关键点解释:
- 路径问题:在
index.html
中,<script src="/socket.io/socket.io.js">
确保了socket.io.js
文件被正确加载。 sendFile
方法:在app.js
中使用res.sendFile
代替res.sendfile
,因为后者已被弃用。io.on
方法:在app.js
中使用io.on('connection', ...)
方法来监听连接事件。
运行步骤:
- 在命令行中运行
node app.js
启动服务器。 - 打开浏览器并访问
http://localhost:8888
。
这样应该可以解决你遇到的 io
未定义的问题,并且能够正常连接到 Socket.IO 服务器。
楼主的 html 文件没弄出来…
建议先参照 markdown 的语法把排版弄好,
然后对照下这里, 看下 <script>
标签有没有漏 http://socket.io/#how-to-use
特别是排版啊…
我运行了一下你这个app.js(将index.html设为空)是没有问题的,问题可能出在你的那个index.html里面。也可以把index.html贴出来看看!
<script src="/socket.io.js"></script>
var socket = io.connect(‘http://localhost:8888’); socket.on(‘news’, function (data) { console.log(data); socket.emit(‘my other event’, { my: ‘data’ }); });
这是我的index.html. 在最上面引用了socket.io.js(src="/socket.io.js");这个文件我放在和index.html同一个目录的。 为啥出现<script>就显示不出来了?
socket.io.js不是你放在那个目录下的,是自动生成的。 所以你路径错了。 只要你正确安装了socket.io 这样写就是对的。 <script src="/socket.io/socket.io.js"></script>
你遇到的问题是因为在 index.html
文件中引用 socket.io
的方式不正确。socket.io-client
需要通过 CDN 或本地路径正确引用。
以下是修改后的代码:
修改后的 index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Socket.IO Example</title>
</head>
<body>
<script src="/socket.io/socket.io.js"></script> <!-- 正确引用 socket.io -->
<script>
var socket = io.connect('http://localhost:8888');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
</body>
</html>
解释
-
引用 socket.io:
- 在你的
index.html
文件中,你需要正确引用socket.io
库。正确的路径是/socket.io/socket.io.js
。这通常由 Node.js 的socket.io
模块自动提供。 - 如果你在本地开发环境中使用
socket.io
,确保你已经安装了socket.io
并且服务器已经启动。
- 在你的
-
检查服务器端代码:
- 你的
app.js
文件看起来没有问题。它正确地设置了 Express 服务器,并且通过socket.io
监听了连接事件。
- 你的
示例代码
确保你已经安装了 express
和 socket.io
:
npm install express socket.io
然后启动你的应用:
node app.js
如果你仍然遇到问题,请确保 socket.io.js
文件可以从浏览器访问到,并且服务器端没有错误。
希望这能解决你的问题!