2009-10-23 6 views
2

Je viens de terminer une application de discussion Web basée sur ajax/php. Mais le problème avec cette application est qu'il doit continuellement interroger le serveur pour vérifier les nouveaux messages, qui à son tour surcharge le serveur si beaucoup de gens utilisent cette application simultanément. maintenant je veux implémenter une application de chat basée sur le socket en JavaScript. Je sais qu'il n'y a pas de support pour les sockets en JavaScript, donc j'ai décidé d'utiliser "Flash comme une passerelle de socket pour JavaScript" J'utilise Linux et et nouveau pour flasher. Quelqu'un peut-il m'aider avec comment y parvenir.Flash en tant que passerelle socket pour javascript

essentiellement, 1) Je veux faire un petit objet SWF qui gère simplement la logique de prise (largeur minimale et la hauteur afin que je puisse le cacher facilement avec marge -ve. 2) Je veux accéder à cet objet swf avec JavaScript

J'ai obtenu un code pour simple socket dans actionscript (à partir d'Internet) mais je ne peux pas le compiler en utilisant mxmlc (compilateur flash gratuit). Heres le code ...

myXML = new XMLSocket; 
    myXML.onConnect = handleConnect; 
    myXML.onXML = handleXML; 
    myXML.onClose = handleDisconnect; 
    myXML.connect("http://www.yourServer.com", 12345); 
    function handleConnect(connectionStatus){ 
    connectionStatus ? trace("Connected.") : trace("Connection failed."); 
    } 
    function handleXML(xmlObject){ 
    trace("Object recieved:: "+xmlObject); 
    } 
function sendXML(textToSend){ 
myXML.send(new XML('"+textToSend+"")); 
} 
function handleDisconnect(){ 
trace("Connection lost."); 
} 
function closeConnection(){ 
trace("Closing connection to server."); 
myXML.close(); 
} 

j'ai obtenu un meilleur code, mais cela ne compile pas aussi

package 
{ 
import flash.errors.*; 
import flash.events.*; 
import flash.net.Socket; 

public class ChatSocket extends Socket 
{ 
    public var host:String; 
    public var port:uint; 
    private var socket:Socket; 
    public static var SOCK_CONNECTED:String = "onSockConnect"; 
    public static var SOCK_IOERROR:String = "onSockIOError"; 

    function ChatSocket(h:String, p:uint) 
    { 
    host = h; 
    port = p; 
    socket = this; 
    super(host, port); 
    initListeners(); 
    } 
    public function sendMessage(str:String):void 
    { 
    if(connected) 
    { 
     socket.writeUTFBytes(str + "\n"); 
    } 
    else 
    { 
     trace("Not connected, message not sent!"); 
    } 
    } 
    public function readMessage():void 
    { 
    if(connected) 
    { 
     var str:String = socket.readUTFBytes(socket.bytesAvailable); 
     trace("Socket Server Response: " + str); 
    } 
    else 
    { 
     trace("No message read, not connected!"); 
    } 
    } 
    private function initListeners():void 
    { 
    socket.addEventListener(Event.CLOSE, closeHandler); 
    socket.addEventListener(Event.CONNECT, connectHandler); 
    socket.addEventListener(IOErrorEvent.IO_ERROR, 
    ioErrorHandler); 
    } 
    private function closeHandler(event:Event):void 
    { 
    trace("Connection to [" + host + "] closed"); 
    } 
    private function ioErrorHandler(event:IOErrorEvent):void 
    { 
    dispatchEvent(new Event(SOCK_IOERROR)); 
    } 
    private function connectHandler(event:Event):void 
    { 
    trace("Connected to [" + host + "]"); 
    dispatchEvent(new Event(SOCK_CONNECTED)); 
    } 
    private function socketDataHandler(event:ProgressEvent):void 
    { 
    readMessage(); 
    } 
} 

} 

var sock:ChatSocket; 
sock = new ChatSocket('127.0.0.1', 9990); 
sock.addEventListener(ChatSocket.SOCK_CONNECTED, connected); 
sock.addEventListener(ChatSocket.SOCK_IOERROR, ioError); 
function ioError(e:Event):void 
{ 
    trace("Cant connect to " + sock.host + " on port " + sock.port); 
} 
function connected(e:Event):void 
{ 
    sock.sendMessage("are you hungry?"); 
} 

ERREUR EST:

localhost bin]$ ./mxmlc ChatSocket.as 
Loading configuration file /home/lk/Documents/flex_sdk_3.4/frameworks/flex-config.xml 
/home/lk/Documents/flex_sdk_3.4/bin/ChatSocket.as: Error: A file found in a source-path can not have more than one externally visible definition. ChatSocket;sock;ioError;connected 
+0

Quelle erreur le compilateur vous donne-t-il? – RSeidelsohn

+0

[lk @ localhost bin] $ ./mxmlc FilledCircle.as Chargement du fichier de configuration /home/lk/Documents/flex_sdk_3.4/frameworks/flex-config.xml /home/lk/Documents/flex_sdk_3.4/bin/ FilledCircle.swf (661 bytes) [lk @ localhost bin] $ ./mxmlc try.as Chargement du fichier de configuration /home/lk/Documents/flex_sdk_3.4/frameworks/flex-config.xml /home/lk/Documents /flex_sdk_3.4/bin/try.as(13): col: 20 Erreur: Erreur de syntaxe: Une chaîne littérale doit être terminée avant le saut de ligne. –

+0

myXML.send (new XML ('"+ textToSend +" ")); ^ /home/lk/Documents/flex_sdk_3.4/bin/try.as(21): col: 1 Erreur: Erreur de syntaxe: attente identifiant avant la fin du programme }^ /home/lk/Documents/flex_sdk_3.4/bin/try.as(21.): col: 1 erreur: erreur de syntaxe:. rightparen attendre avant la fin du programme } ^ /home/lk/Documents/flex_sdk_3.4/bin/try.as(21): col: 1 Erreur: Erreur de syntaxe: attendez la fin du programme avant la fin du programme. } ^ /home/lk/Documents/flex_sdk_3.4/bin/try.as(21): col: 1 Erreur: Erreur de syntaxe: attendre l'extrémité droite avant la fin du programme. } ^ –

Répondre

6

Vous pouvez consulter le web-socket-js de gimite. Il s'agit d'une passerelle de socket conforme au work-in-progress Web Socket API. Ainsi, à l'avenir, les navigateurs implémentant WebSocket natif passeront automatiquement à l'alternative sans Flash.

+0

merci pour les liens .... très utile –

+0

C'est exactement ce que je cherchais. Merci! –

0

Le code suivant se trouve en dehors de la class et package{} blocs. Ce n'est pas autorisé.

var sock:ChatSocket; 
sock = new ChatSocket('127.0.0.1', 9990); 
sock.addEventListener(ChatSocket.SOCK_CONNECTED, connected); 
sock.addEventListener(ChatSocket.SOCK_IOERROR, ioError); 
function ioError(e:Event):void 
{ 
    trace("Cant connect to " + sock.host + " on port " + sock.port); 
} 
function connected(e:Event):void 
{ 
    sock.sendMessage("are you hungry?"); 
} 

Déclarez une classe de document (qui s'étend Sprite) et déplacer ioError et connected méthodes pour cela. Créez une variable d'instance à la place d'une variable locale et ajoutez la partie de déclaration de sock dans son constructeur.

//DocClass.as 
package 
{ 
    public class DocClass 
    { 
    private var sock:ChatSocket; 
    public function DocClass() 
    { 
     sock = new ChatSocket('127.0.0.1', 9990); 
     sock.addEventListener(ChatSocket.SOCK_CONNECTED, connected); 
     sock.addEventListener(ChatSocket.SOCK_IOERROR, ioError); 
    } 
    private function ioError(e:Event):void 
    { 
     trace("Cant connect to " + sock.host + " on port " + sock.port); 
    } 
    private function connected(e:Event):void 
    { 
     sock.sendMessage("are you hungry?"); 
    } 
    } 
} 
+0

merci pour l'aide ... pouvez-vous me dire s'il est possible de créer un petit fichier swf (qui n'apparaîtra pas sur le front-end) qui va gérer la socket socket et puis-je y accéder en utilisant javascript ... merci d'avance –

Questions connexes