很多人在正确安装了socket.io(评判正确与否是能否运行socket.io官网上的app.js例子)之后发现在服务器端能正确运行,但是在客户端总是不能正确运行(什么都不显示并且服务器端没有类似’成功连接’的提示),在此我只是说说我自己的理解。 我的客户端和服务端的代码如下(均复制socket.io官网的例子,稍有改动,无妨碍):
app.js
var app = require('http').createServer(handler)
,io = require('socket.io').listen(app)
,fs = require('fs')
app.listen(80);
function handler (req, res) {
}
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
index.html
<!DOCTYPE html>
<html>
<head>
<title>socket.io</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1>socket.io</h1>
<p>Welcome to socket.io</p>
<strong><!-- 最关键点 --></strong>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost');
socket.on('news', function (data) {
//console.log(data);
alert("aaaaaaaa");
socket.emit('my other event', { my: 'data' });
});
</script>
</body>
</html>
如果你能正确运行‘#node app.js’,能保证你是肯定安装成功了socket.io; 问题在于你怎么打开客户端的index.html:
a).如果你先启动服务器端(执行node app.js
),然后直接双击打开index.html?你是这么打开index.html的?那么你就错了,因为当你在点击打开本地文件index.html时,执行解析此文件的是本地的浏览器,即使你电脑装了node.js,node.js也对它不闻不问,所以,这种情况下浏览器会解析
<script src="/socket.io/socket.io.js"></script>
结果就是在本地的目录下查找/socket.io/
目录下的socket.io.js
文件(我的错误显示为无法找到D:\\socket.io\socket.io.js'文件
),这当然是找不到了。
b).如果你是通过浏览器地址栏敲入http:\\localhost
,则这么一来会如你所愿的成功执行了,但是如果你在用a)中的方法再打开还是错误。 其实错误点就在
<script src="/socket.io/socket.io.js"></script>
这么一来是查找本地的静态目录,node.js不会管的,要把它改成服务器解析的形式,即
<script src="http://localhost/socket.io/socket.io.js"></script>
这么一来的话不管用哪种方法打开应该都没问题了。
这些都是我的经历,因为这几天才开始学习web方面的知识,用恰好碰到这node.js的socket.io,各种原理概念不懂,所以犯的错也是低级的,不过每个人不都是从’hello world’开始学期的么。
<li>修正一下,那个服务端的连接返回网页的代码被我删了=。=,所以开启服务器后再在浏览器中输入地址无返回任何东西。。。。 </li>
……,html页面不是直接双击打开的,你创建的是服务器,当然需要用http
协议打开了,而不是本地file
协议
感谢楼主文章,今天初次使用socket.io就遇到这个问题,还好找到楼主文章,