【问题标题】:Socket.io server emits not firingSocket.io 服务器发出不触发
【发布时间】:2011-09-22 22:55:04
【问题描述】:

好的,在 NodeJS 和 socket.io 上尝试一下,但遇到了问题。我在本地主机上安装并运行了 NodeJS 和 Socket.io。目前我有以下设置:

server.js

// Require HTTP module (to start server) and Socket.IO
var http = require('http'), io = require('socket.io');

// Start the server at port 8080
var server = http.createServer(function(req, res){ 

// Send HTML headers and message
  res.writeHead(200,{ 'Content-Type': 'text/html' }); 
  res.end('<h1>NodeJS Server Online</h1>');
});
server.listen(8080);

// Create a Socket.IO instance, passing it our server
var socketserver = io.listen(server);

// Add a connect listener
socketserver.on('connection', function(socket){ 

    socket.emit("server ready");

    socket.on('test', function (msg) {
        socket.broadcast.emit('TEST:', msg);
        console.log(msg);
    });

    socket.on('user message', function (msg) {
        socket.broadcast.emit('user message', msg);
        console.log(msg);
    });

});

client.js

$(document).ready(function() {
// Stuff to do as soon as the DOM is ready;
    var socket =  io.connect('http://localhost',{port:8080});

    socket.on('server ready',function() {
        messages.append("<li>Server Ready...</li>");
        console.log("Server Ready");
    });

    // Add a connect listener
    socket.on('connect',function() {
        messages.append("<li>Connected...</li>");
        console.log("connected");
        socket.emit('test',"Just testing");
    });

});

服务器启动正常,但我的问题是 server.js 没有触发 socket.emit("server ready"); 行。客户端代码可以正常工作,就像在 terminal.app 中测试我的服务器时一样输出这一行:

websocket received data packet 5:::{"name":"test","args":["Just testing"]}

我错过了什么?为什么服务器端的东西没有触发?

【问题讨论】:

    标签: node.js websocket socket.io


    【解决方案1】:

    我将 socket.io 更新为 0.7.2,然后稍微修改了您的示例以使用 express。下面的代码能够接收到“服务器就绪”事件。

    节点服务器:

    var http = require('http'),  
        express = require('express');
    
    var app = module.exports = express.createServer();
    
    // Configuration
    
    app.configure(function(){
      app.use(express.static(__dirname + '/public'));
    });
    
    app.listen(9000);
    console.log("server started");
    
    // socket.io 
    var io = require('socket.io').listen(app);
    
    io.sockets.on('connection', function(socket){ 
        socket.emit('server ready', {msg: 'hi'}) ;
    }); 
    

    网页(/sock.html):

    <html>
    <body>
    <script type="text/javascript" src="/socket.io/socket.io.js"></script>
    <script> 
    var socket = io.connect();
    socket.on('server ready', function(data){ console.log('server ready!'); }) ;
    </script> 
    </body>
    </html>
    

    【讨论】:

    • 为什么要快递?对于许多项目,我只需要提供 1 个 html 文件,对于这种情况 imo 来说,express 实在是太多了
    • 可能是因为所有的 socket.io 教程在他们的例子中都使用 express?
    猜你喜欢
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 2012-09-21
    相关资源
    最近更新 更多