nodejs debug在Windows 7/8 32和64bit以及cloud9上提供静态内容/socket.io

时间:2013-08-08 12:48:15

标签: node.js express socket.io static-content

我无法通过Guillermo Rauch本地和cloud9平台上的一个非常基本的socket.io聊天示例(仅对其进行初步测试)在我的机器上运行socket.io。我已经尝试将socket.io与express 2.5.x和express 3(相应地更改服务器代码)相结合,并使用Nodeclipse和命令行运行获得相同的行为:

  

info:socket.io开始了   在端口上运行@ localhost的套接字服务器   3000

当我访问localhost:3000时,我得到了:

  

debug:提供静态内容/socket.io

没有握手,也许客户端没有连接 也许这个问题很容易看到,但我无法在这里和其他地方找到适合我案例的答案。这是我的环境:

Windows 7 x86或Windows 8 64bit; 最新稳定节点上的Nodeclipse(如果我没记错的话,为0.10.15); 使用:google chrome,firefox,IE最新版;

还尝试通过WAMP服务器提供索引页面;

尝试了很多替代方案,这似乎表明它不是代码的问题,而是属于其他东西(表示与最新的节点安装不兼容?环境变量有什么问题?);

express似乎服务于/socket.io/socket.io.js文件,因为当我输入localhost:3000 / socket.io / socket.io.js时,它可以通过任何浏览器读取(我不知道是否这个是正确的考验。)

以下是客户端代码:

<!doctype html>
<html>
<head>
    <title>my test</title>
    <script src="/socket.io/socket.io.js"></script>
    <script src="chat.js">
    <link href="/stylesheets/style.css" rel="stylesheet" />
</head>
<body>
    <div id="chat">
        <ul id="messages"></ul>
        <form id="form">
            <input type="text" id="input" />
            <button>Send</button>
        </form>
    </div> 
</body>
</html>

以下是服务器端应用:

var express = require('express');
var sio = require('socket.io');
var app = express.createServer(
        express.bodyParser(),
        express.static('public'));
app.listen(3000);

var io = sio.listen(app);

console.log('Socket server running @ localhost on port ' + 3000);

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

chat.js包含:

window.onload = function() {
    var socket = io.connect("http://localhost:3000");
    socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
};

这些是socket.io和express的版本,通过nodeclipse工作区文件夹(c:/ users / myname / workspace / nameoftheapp)提供的npm install命令在本地安装(express也是全局安装的) “表达”:“2.5.4”, “socket.io”:“0.9.16”

项目结构

node_modules  
|- [...] (all the installed folders and files]  
public  
|- stylesheets  
--|-style.css  
|- index.html  
app.js  
package.json  
readme.md  

我是否必须在连接中设置一些内容才能正确指向我的工作区?

2 个答案:

答案 0 :(得分:0)

您需要使用http.createServer代替express.createServer

var express = require("express");
var http = require("http");
var app = express();
var server = http.createServer(app);
var io = require("socket.io").listen(server);

server.listen(3000, function () {
  console.log("listening on port 3000");
});

答案 1 :(得分:0)

我在尝试弄清楚如何在 Cloud9 上使用socket.io时遇到了这个问题。我不知道 Cloud9 如何影响你的问题(虽然在你的标题中提到过),但对我来说,我无法从客户端建立握手,只得到{{1} } Cloud9 终端中的消息。我最终发现它是客户端中导致问题的连接链接。使用socket.io设置Express也不容易,因为你可能会对彼得所说的不同变量感到困惑。

服务器代码:

debug: served static content

客户代码:

var express = require('express'),
    http = require("http"),
    app = express(),
    server = http.createServer(app),
    io = require('socket.io').listen(server);

server.listen(process.env.PORT || 3000, function() {
    console.log('Express server started on port %s', process.env.PORT);
});

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(window.location.hostname); socket.on('news', function(data) { console.log(data); socket.emit('my other event', { my: 'data' }); }); </script> ,因此该脚本既适用于 Cloud9 测试服务器,也适用于我部署应用的任何地方(在我的情况下, Heroku )。

window.location.hostnameExpress 3.2.6一起使用。