Node.js - Обслуживание файла index.html и веб-сокетов - PullRequest
0 голосов
/ 11 декабря 2011

Я новичок в Node и Socket.io и пытаюсь запустить приведенный ниже код. Он предназначен для обслуживания запросов WebSocket, однако я хотел бы изменить его, чтобы он также обслуживал статический контент, такой как index.html.

Мой код сокета выглядит следующим образом:

var http        = require("http"),
    sys         = require("sys"),
    io          = require("socket.io"),
    GlobTrie    = require("glob-trie.js");

var Brokaw = {};

Brokaw.Server = function(port) {
var self = this;

// setup the basic HTTP server -- socket.io will wrap this
var server  = http.createServer(function(req, res) {
    // We have to respond with something, otherwise the connections hang :(
    res.writeHead(404);
    res.close();
});
server.listen(port);

this._io    = io.listen(server, { "resource": "brokaw" });
this._trie  = new GlobTrie();

this._io.on("connection", function(conn) {
    new Brokaw.Server.Client(conn, self);
});
};

    new Brokaw.Server(8080);

И мой код для обслуживания index.html выглядит следующим образом:

// Hardcode *all* HTTP requests to this server to serve up index.html
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);
    }
);

Кто-нибудь может посоветовать, как интегрировать эти два кода, т.е. изменить верхний код, чтобы он также служил моему файлу index.html?

Ценю любые комментарии, и я боролся в течение многих часов!

С уважением, Бен.

1 Ответ

4 голосов
/ 11 декабря 2011

Вот пример, взятый с официальной Socket.IO домашней страницы :

Серверный

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

app.listen(80);

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);
  });
});

на стороне клиента :

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...