如何使用socket.io发出事件以响应事件?

时间:2016-01-24 02:19:07

标签: javascript node.js express socket.io

我是socket.io的新手,并尝试让它工作。我不知道我在这里做错了什么,因为它似乎超级直白 - 但它不起作用。我想我错过了一些明显的东西。希望其他人可以看到它是什么。

我正在设置socket.io以使用节点/快速服务器。这是我正在尝试的测试的简化版本。

服务器:

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

/* socket.io test */
io.on('connection', function(socket){
  socket.on('helloServer', function(clientMessage){
    console.log("Server got 'helloServer' event");
    socket.emit('helloClient', { message : "Hi there. We got your message: " + clientMessage.message});
  });
});

客户端有一个函数callServer,当用户点击UI中的按钮时会调用该函数:

var socket = io.connect('http://localhost');

function callServer() {
  socket.emit('helloServer', { message : "Hello server!" });
}

socket.on('helloClient', function (serverMessage) {
  console.log(serverMessage.message);
});

当我运行此代码并单击调用callServer的按钮时,服务器确实获得了事件helloServer,因为我看到控制台按预期记录消息,但客户端从不收到helloClient个活动。好像socket.emit响应函数中的socket.on调用永远不会被调用。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

似乎没问题。但是,为了以防万一,请检查this answer以及向客户端发送数据的所有方法,并尝试使用" io.emit" (发送给所有客户)。或者尝试发送字符串而不是json对象。

我试过这个example here并且它正常工作,只是复制并粘贴。