考虑以下实现井字游戏:
一名玩家通过触发主调度程序上的事件来发送移动。
var dispatcher = new WebSocketRails('localhost:3000/websocket');
var channel = dispatcher.subscribe_private('private_game');
channel.bind('new_move', function(move) {
// received new move, process it
});
// later on when we want to send a move to the server we run the following code
var move = {
square: ...;
}
dispatcher.trigger('move', move);
在服务器上,控制器可以验证用户是否已获得特定井字游戏的授权。然后它可以向两个玩家广播这一举动。
class TicTacToeController < WebsocketRails::BaseController
def move
# code to verify the move is valid and save to database
...
# broadcast move to all players
WebsocketRails[:private_game].trigger(:new_move, message)
end
end
但是没有强制要求客户端仅使用主调度程序发送消息。假设“private_game”频道仅供服务器用于广播动作。但是一个敌对的客户端可以在上面发送随机数据
channel.trigger('new_move', randomdata);
由于通道事件不通过事件路由器,因此不通过控制器操作,因此服务器端没有任何东西可以过滤掉随机垃圾邮件。
有没有办法阻止服务器上的随机数据垃圾邮件?也许我误解了如何使用 websocket-rails?