1

我按照net tuts 教程使用套接字和节点构建了一个简单的聊天应用程序,现在我正在尝试扩展该应用程序以允许人们玩我编写的游戏,所以我想让人们列出可用的游戏,但我似乎无法将一个简单的测试数组从服务器传递到客户端。

我会让代码自己说话:

相关服务器代码:

var games = ["test"];
io.sockets.on('connection', function (socket) {
  socket.emit('message', { message: 'welcome to the chat' });
  socket.on('gameList', function (data) {
    io.sockets.emit("games",games);
  });
  socket.on('send', function (data) {
    io.sockets.emit('message', data);
  });
});

客户端:

window.games = [];
$("#listGames").click(function(){
  socket.emit("gameList", function(data){
    window.games = data;
  })
})

所以我在按钮单击之前和之后 console.log 游戏,它总是一个空数组,在我的脑海中,它应该包含字符串"test"

那么我哪里做错了?

注意: 将 jQuery 添加到代码库中,即使本教程错过了它。

4

1 回答 1

4

socket.emit()用于尝试接收数据。那只会将数据发送到服务器。您需要games客户端上的事件处理程序来相应地处理事件。

window.games = [];

$("#listGames").click(function() {
  socket.emit('gameList');
});

socket.on('games', function (games) {
  window.games = games;
});

当您在服务器端执行时,事件处理程序games将触发。io.sockets.emit('games', games);

还要确保始终通过 Socket.IO 传递一个对象作为响应。将服务器端代码从 : 更改var games=[];var games={'games':[]};或类似的东西。

于 2013-09-16T16:01:52.703 回答