Javascript NODEJ和HTML5 WebSocket不能一起工作

Javascript NODEJ和HTML5 WebSocket不能一起工作,javascript,html,node.js,websocket,Javascript,Html,Node.js,Websocket,我已经在我的Ubuntu机器上安装了NodeJS,并创建了以下脚本 var host = 'localhost' var port = '8080' var net = require('net'); net.createServer(function (socket) { socket.write("Echo server\r\n"); socket.on("data", function (data) { socket.write(data); })

我已经在我的Ubuntu机器上安装了NodeJS,并创建了以下脚本

var host = 'localhost'
var port = '8080'
var net = require('net');

net.createServer(function (socket) {
    socket.write("Echo server\r\n");
    socket.on("data", function (data) {
        socket.write(data);
    });
}).listen(port, host);

console.log('Server running at http://' + host + ':' + port + '/');
然后我跑

node example.js
…在一个终端,这给了我以下信息

Server running at http://localhost:8080/
我用以下代码创建了一个简单的HTML页面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
    <head>
      <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js'></script>
      <script>
        $(document).ready(function(){
            if(!("WebSocket" in window)) {
                alert("Sorry, the build of your browser does not support WebSockets.");
                return;
            }

            ws = new WebSocket("ws://localhost:8080/");

            ws.onclose = function() {
                alert("socket closed");
            };
            ws.onopen = function() {
                alert("socked opened");
            };
            ws.onmessage = function() {
                alert("message received");
            };

            $( 'button' ).click( function() {
                ws.send( "testing" );
            });

            setInterval( function() {
                $( 'p.readyState' ).text( ws.readyState );
            }, 1000 );
        });
      </script>
    </head>
    <body>
        <button type="button">Click Me!</button>
        <p class="readyState"></p>
    </body>
</html>

$(文档).ready(函数(){
如果(!(“窗口中的WebSocket”){
警报(“抱歉,您的浏览器版本不支持WebSocket。”);
返回;
}
ws=newwebsocket(“ws://localhost:8080/”;
ws.onclose=function(){
警报(“插座关闭”);
};
ws.onopen=函数(){
警惕(“套开”);
};
ws.onmessage=function(){
警报(“收到消息”);
};
$(“按钮”)。单击(函数(){
ws.send(“测试”);
});
setInterval(函数(){
$('p.readyState').text(ws.readyState);
}, 1000 );
});
点击我!

但当我浏览到该页面时,我没有收到任何反馈,readyState始终为0。如果在页面仍然打开时停止服务器,则会收到套接字关闭警报

我已经在Chrome(8.0.552.215)、Firefox4(Beta 7)和Opera 11(Beta)中测试了这个脚本

有人有什么建议吗


谢谢

您运行的不是WebSocket服务器,而是HTTP服务器。我写了一篇文章,试着通读一下,以获得更详细的解释


您需要将连接提升到WebSocket连接,因为WS-connection最初使用标准HTTP请求。创建一个围绕实现的服务器,而不是
net

我建议您看看哪个提供了通用的跨浏览器API,使用浏览器支持的任何东西(包括WebSocket)透明地进行。正式的服务器端实现在NodeJS中。这是在一份报告中提出的

在即将发布的预发布中,由于协议级别的严重问题。Opera已经宣布在第11版中也会这样做