Javascript NodeJS+;socket.io:简单的客户端/服务器示例不工作

Javascript NodeJS+;socket.io:简单的客户端/服务器示例不工作,javascript,node.js,comet,socket.io,Javascript,Node.js,Comet,Socket.io,我使用的是NodeJS v0.4.8和最新版本的socket.io npm安装socket.io 在Ubuntu上: Linux mars 2.6.38-8-generic#42 Ubuntu SMP周一4月11日03:31:50 UTC 2011 i686 i686 i386 GNU/Linux 不幸的是,下面的代码既不在客户端也不在服务器端生成任何输出 有人有线索吗 服务器端 客户端 var socket=new io.socket(null,{port:8082,rememberTran

我使用的是NodeJS v0.4.8和最新版本的socket.io

npm安装socket.io

在Ubuntu上:

Linux mars 2.6.38-8-generic#42 Ubuntu SMP周一4月11日03:31:50 UTC 2011 i686 i686 i386 GNU/Linux

不幸的是,下面的代码既不在客户端也不在服务器端生成任何输出

有人有线索吗

服务器端 客户端

var socket=new io.socket(null,{port:8082,rememberTransport:true,timeout:1500});
socket.connect();
socket.on('connect',function(){
log('连接到服务器');
send('Hi Server…');
});
socket.on('message',function(){
log('收到消息!');
});
socket.on('disconnect',function(){
log('从服务器断开连接');
});
NodeJS(不是sys.put(“…”)调用)的输出是:

信息-socket.io已启动调试- 服务静态/socket.io.js调试- 客户端授权信息-握手 授权信息-握手 B61A5C2751C8C8493DB4B79D19E779


我以您的示例为例,使用express将其放到了一个节点应用程序中。您的HTML代码被放置在public下的静态HTML文件中。你的例子很好。代码如下所示。我想确保socket.io脚本文件和HTML文件都正常提供

var http = require('http'),  
    io = require('socket.io'),
    express = require('express');

var app = module.exports = express.createServer();

// Configuration

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

if (!module.parent) {
  app.listen(9000);
  console.log("server started at %s", (new Date()).toUTCString());
  console.log("listening on port %d", app.address().port);
}


// socket.io 
var socket = io.listen(app); 
socket.on('connection', function(client){ 
    console.log("New client is here!");
    client.send("hello world");
    client.on('message', function(msg){ console.log("client has sent:"+msg); }) ;
    client.on('disconnect', function(){ console.log("Client has disconnected"); }) ;
    client.on('disconnect', function(){ }) 
 }); 
我也(像Derrish)喜欢使用框架来简化我的工作(AWESOME:))。您可以从下载并提取此示例。我相信您甚至不必安装这些模块,因为我已经在本地绑定了它们(只需运行),这要感谢npm:)

如何安装: 守则: app.js:

// npm install express
// npm install socket.io

var sys         = require('sys'),
        express = require('express'),
        app         = express.createServer('127.0.0.1'),
        io          = require('socket.io'); 

app.use(express.static(__dirname + '/public'));

app.get('/', function (req, res) {
    res.send('Hello World');
});

app.listen(3000);

var socket = io.listen(app); 

socket.on('connection', function (client){ 
  // new client is here!
  setTimeout(function () {
        client.send('Waited two seconds!');
    }, 2000);

  client.on('message', function () {
  }) ;

  client.on('disconnect', function () {
  });
});
<html>
<p id="text">socket.io</p>

<script src="socket.io/socket.io.js"></script> 
<script src="jquery-1.6.1.min.js"></script><!-- Downloaded Jquery -->

<script> 
    $(document).ready(function(){

        var socket  = new io.Socket(),
                text        = $('#text');

        socket.connect();

        socket.on('connect', function () {
            text.html('connected');
        });

        socket.on('message', function (msg) {
            text.html(msg);
        });

        socket.on('disconnect', function () {
            text.html('disconnected');
        });

    });
</script> 
public/index.html:

// npm install express
// npm install socket.io

var sys         = require('sys'),
        express = require('express'),
        app         = express.createServer('127.0.0.1'),
        io          = require('socket.io'); 

app.use(express.static(__dirname + '/public'));

app.get('/', function (req, res) {
    res.send('Hello World');
});

app.listen(3000);

var socket = io.listen(app); 

socket.on('connection', function (client){ 
  // new client is here!
  setTimeout(function () {
        client.send('Waited two seconds!');
    }, 2000);

  client.on('message', function () {
  }) ;

  client.on('disconnect', function () {
  });
});
<html>
<p id="text">socket.io</p>

<script src="socket.io/socket.io.js"></script> 
<script src="jquery-1.6.1.min.js"></script><!-- Downloaded Jquery -->

<script> 
    $(document).ready(function(){

        var socket  = new io.Socket(),
                text        = $('#text');

        socket.connect();

        socket.on('connect', function () {
            text.html('connected');
        });

        socket.on('message', function (msg) {
            text.html(msg);
        });

        socket.on('disconnect', function () {
            text.html('disconnected');
        });

    });
</script> 
已安装的模块(不需要): 浏览器将显示:
  • socket.io
    在启动时,但您可能无法看到它,因为它将被连接的
    替换
  • 已连接
    当用户连接到socket.io时
  • 2秒后,它将显示
    等待2秒
  • Express 3.0+Socket.io工作示例 服务器(app.js) 客户端(index.html)
    
    var socket=io.connect('http://localhost:8081');
    
    您可以使用下面的链接派生代码

    hi@Derrish,oke,听起来还不错,谢谢。我已经将您在test.js中显示的代码放入,然后创建了一个公用文件夹,并将index.html放入该公用文件夹。当我运行“节点测试”并访问localhost:9000时,我得到一个“cannotget/”错误。从浏览器访问此示例的正确方式是什么?谢谢。我相信静态文件夹中的任何文件都需要使用URL中的完整路径进行寻址。好的,这个示例正在运行,但是我在控制台中没有得到任何输出。您是否在控制台中获得文本(“新客户端在这里,客户端已发送:…”等等)?您使用的是哪个NodeJS/Socket.io版本?我怀疑您的浏览器中没有加载Socket.io.js文件。您是否确认您的浏览器没有报告脚本错误?确保脚本标记引用了正确的路径/socket.io/socket.io.jsGreat,谢谢,您的示例正在运行。这很奇怪,但我认为这行代码:express.createServer('127.0.0.1')和显式IP(而不是“localhost”)符号解决了我的问题。非常感谢@Alfred“node app.js”命令启动我的socket.io服务器。但当我关闭终端时,服务器停止,客户端断开连接。那个么,我怎样才能使服务器始终处于开启状态而不停止呢?请不要发布仅仅是你们博客链接的答案。请参阅和此Meta Stack Overflow讨论:感谢您改进您的答案=)您可以重新添加链接,只要它不是您答案中的唯一内容(而且链接似乎是相关的)。
    <html>
    <p id="text">socket.io</p>
    
    <script src="socket.io/socket.io.js"></script> 
    <script src="jquery-1.6.1.min.js"></script><!-- Downloaded Jquery -->
    
    <script> 
        $(document).ready(function(){
    
            var socket  = new io.Socket(),
                    text        = $('#text');
    
            socket.connect();
    
            socket.on('connect', function () {
                text.html('connected');
            });
    
            socket.on('message', function (msg) {
                text.html(msg);
            });
    
            socket.on('disconnect', function () {
                text.html('disconnected');
            });
    
        });
    </script> 
    
    alfred@alfred-laptop:~/tmp/socketio$ npm ls
    /home/alfred/tmp/socketio
    ├─┬ express@2.3.11 
    │ ├── connect@1.4.6 
    │ ├── mime@1.2.2 
    │ └── qs@0.1.0 
    └── socket.io@0.6.18
    
    npm install express
    npm install socket.io
    
    var express = require('express');
        var app = express.createServer();
        var socket = require('socket.io');
        app.configure(function(){
            app.use(express.static(__dirname + '/'));
        });
        var server = app.listen(8081);
        var io = socket.listen(server);
        io.sockets.on('connection', function (socket) {
            console.log("connnect");
            socket.on('disconnect', function (socket) {
            console.log("disconnect");
         });
    }); 
    
    <script src="/socket.io/socket.io.js"></script>
    <script>
        var socket = io.connect('http://localhost:8081');
    </script>