关于socket.io客户端一个问题解答
发布于 10 年前 作者 neolii 4719 次浏览 最后一次编辑是 8 年前

很多人在正确安装了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’开始学期的么。

3 回复

<li>修正一下,那个服务端的连接返回网页的代码被我删了=。=,所以开启服务器后再在浏览器中输入地址无返回任何东西。。。。 </li>

……,html页面不是直接双击打开的,你创建的是服务器,当然需要用http协议打开了,而不是本地file协议

感谢楼主文章,今天初次使用socket.io就遇到这个问题,还好找到楼主文章,

回到顶部