NodeJS中的Socket.IO - 从客户端发出事件并不起作用

时间:2015-04-21 09:31:33

标签: javascript node.js websocket socket.io

我有服务器端的代码:

var express = require('express');

module.exports = function(io){

 var router = express.Router();
 router.get('/', function(req, res, next) {
 res.render('monitoring', { title: 'monitoring-test' });
 });



io.on("connection", function(socket) {
    console.log('test connection!');
    socket.on("SampleEvent", function (args1) {
        console.log('called Sample event');
    });
});


    return router;
 }

在客户端,我有:

var socket = io.connect('http://localhost:3000/monitoring')
 alert("alertbox1");


$(document).ready(function() {
    $("#btnCallEvent").click(function(){
        var args1 = {user: "client1", text: "Hello, world!"};
socket.emit("SampleEvent", args);
    }); 
});

OnClick事件正常工作,连接也起作用 - 打开监控站点后我在控制台中有'test connection!'。但是,当我尝试从客户端调用SampleEvent(点击按钮后)时,就会发生这种情况。

2 个答案:

答案 0 :(得分:0)

这就是我在服务器端使用socket.io的方式,这对我有用:

文件顶部的设置:

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

返回套接字事件:

io.on('connection', function(socket){
    socket.on('MyEvent', function(data) {
        console.log('My Event has fired and contains:');
        console.log(data);
    });
});

然后在客户端:

<script src="/socket.io/socket.io.js"></script>
<script>
    var socket = io();
    socket.emit('MyEvent', {EventData1: 'test', EventData2: 'test2' });
</script>

答案 1 :(得分:0)

我认为您的问题是您正在连接到/ monitoring,这可能会隐式选择名为monitoring的名称空间/房间。尝试直接连接到/

io.connect('http://localhost:3000/')

看看这是否有所作为。而且,在哪里可以将socket.io添加到底层的http服务器(在您的情况下为express)。它没有显示在您的样本中。