Performance 写入多个套接字连接的最快方式

Performance 写入多个套接字连接的最快方式,performance,actionscript-3,sockets,optimization,Performance,Actionscript 3,Sockets,Optimization,我使用下面的类来接受来自客户端应用程序的传入连接-使用send函数,我希望同时向每个客户端写入相同的UTFBytes-这可能吗?或者,如果没有,那么按顺序向它们写入的最快方式是什么 public class ProjectorClients { private var _serverSocket:ServerSocket; private var _clients:Vector.<Socket> = new Vector.<Socket>; pr

我使用下面的类来接受来自客户端应用程序的传入连接-使用send函数,我希望同时向每个客户端写入相同的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);
    }

}
公共类ProjectorClient
{
私有变量serverSocket:serverSocket;
私有var_客户端:Vector.=新向量。;
专用函数ProjectorClient():void
{
_serverSocket=新的serverSocket();
_serverSocket.addEventListener(ServerSocketConnectEvent.CONNECT,onConnect)
_serverSocket.bind(888);
_serverSocket.listen();
}
onConnect的专用函数(e:ServerSocketConnectEvent):无效
{
跟踪(“客户已连接”);
e、 socket.addEventListener(ProgressEvent.socket_数据,onData);
e、 socket.addEventListener(Event.CLOSE,onConnectionClosed);
_客户机。推送(如插座);
跟踪(“连接的客户端数:”+_clients.length);
}
公共函数发送(命令:字符串):无效
{
对于每个(var clientSocket:Socket in_clients)
{
if(clientSocket.connected)
{
clientSocket.writeUTFBytes(命令);
clientSocket.flush();
}
}
}
私有函数onData(e:ProgressEvent):无效
{
跟踪(“收到的数据”);
}   
连接关闭的专用函数(e:事件):无效
{
跟踪(“客户端套接字已关闭”);
对于(变量i:int=0;i<\u clients.length;i++)
{
if(_clients[i]==e.currentTarget)
{
_客户。拼接(i,1);
打破
}
}
跟踪(“连接的客户端数:”+_clients.length);
}
}

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


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


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