【问题标题】:Fastest way to write to multiple socket connections写入多个套接字连接的最快方法
【发布时间】:2011-12-05 10:33:42
【问题描述】:

我正在使用以下类来接受来自客户端应用程序的传入连接 - 使用发送函数我想同时向每个客户端写入相同的 UTFBytes - 这可能吗?或者如果没有,按顺序写入它们的最快方法是什么。

public class ProjectorClients
{
    private var _serverSocket:ServerSocket;
    private var _clients:Vector.<Socket> = new Vector.<Socket>;

    private function ProjectorClients():void
    {
        _serverSocket = new ServerSocket();
        _serverSocket.addEventListener(ServerSocketConnectEvent.CONNECT, onConnect)
        _serverSocket.bind(888);
        _serverSocket.listen();
    }

    private function onConnect(e:ServerSocketConnectEvent):void
    {
        trace("Client is connected");
        e.socket.addEventListener(ProgressEvent.SOCKET_DATA, onData);
        e.socket.addEventListener(Event.CLOSE, onConnectionClosed);
        _clients.push(e.socket);
        trace("Number of connected clients: " + _clients.length);
    }

    public function send(command:String):void
    {
        for each(var clientSocket:Socket in _clients)
        {
            if (clientSocket.connected)
            {
                clientSocket.writeUTFBytes(command);
                clientSocket.flush();
            }
        }
    }

    private function onData(e:ProgressEvent):void
    {
        trace("data received");
    }   

    private function onConnectionClosed(e:Event):void
    {
        trace("Client Socket is Closed");
        for (var i:int = 0; i < _clients.length; i++)
        {
            if (_clients[i] == e.currentTarget)
            {
                _clients.splice(i,1);
                break;
            }
        }
        trace("Number of connected clients: " + _clients.length);
    }

}

【问题讨论】:

  • 您是在设置基础架构还是可部署的应用程序?如果这是 Java 或 .Net,我建议让服务器只向 Apache/Kafka 这样的分布式发布-订阅消息系统写入一次。不知道有没有actionScript的快速排队解决方案。
  • 这仅适用于可部署的 as3 应用程序。谢谢你的提示,我会研究这个以备将来使用。
  • 在一个循环中写入,然后在第二个相同的循环中刷新怎么样?

标签: performance actionscript-3 sockets optimization


【解决方案1】:

正如@eSniff 所述,您需要一个发布订阅模块。 Redis 将是一个更好的选择,因为它只需要最少的设置步骤。传入的连接将订阅队列,您可以发布数据,以便所有客户端同时接收它。请参阅下面的链接以获得更好的理解。

http://redis.io/topics/pubsub

【讨论】:

    猜你喜欢
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多