在没有处理程序的情况下创建服务器时,无法为客户端找到socket.io.

时间:2012-08-27 17:02:12

标签: node.js socket.io

浏览器找不到客户端的socket.io.js:

<script src="/socket.io/socket.io.js"></script>

创建没有处理程序的服务器时:

var app = require('http').createServer(handler)
  , io = require('socket.io').listen(app)
  , fs = require('fs');

app.listen(80);

//without this part:
/*function handler (req, res) {
  fs.readFile(__dirname + '/index.html',
  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading index.html');
    }

    res.writeHead(200);
    res.end(data);
  });
}*/

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

我不需要也不需要处理函数,因为我在PHP中生成了所有内容。有时将客户端应用程序函数用于另一个文件而不是index.html / php

那么如何让浏览器找到socket.io.js?

3 个答案:

答案 0 :(得分:1)

在您的客户端包含此内容!

<script type="text/javascript" src="/socket.io/socket.io.js"></script> 
var io = io.connect();

答案 1 :(得分:0)

如果您不需要访问http模块功能,请使用以下方式:

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

答案 2 :(得分:0)

我有wrote一个演示应用程序,如果您不想在开始使用socket.io和Express 3时花费太多时间,可以查看。

要让客户端js工作的websockets需要从Web服务器传递。这是许多浏览器限制之一。 最简单的设置是让节点服务器同时提供客户端Js和WebSockets。使用Express的http模块更容易(有点矫枉过正,但如果你想构建的不仅仅是一个测试应用程序,那么超级实用)。

另外,你需要让你的客户端js指向正确的位置。例如,如果您运行端口8080的socket.io服务器,并在端口8000上交付静态客户端(例如使用python -m SimpleHTTPServer或使用常规apache使用端口80)。

<script src="http://localhost:8080/socket.io/socket.io.js"></script>