2017-06-17 57 views
0

我在這裏發現了很多樣本​​,但使用非常舊的節點和adobe air版本的舊帖子。我做了簡單的節點js服務器,它正在正常工作 - 使用網絡瀏覽器進行測試。節點JS是6.11版本。如何正確設置從AS3空氣到nodejs的套接字連接

var http = require('http'); 
var sockets = []; 
var server = http.createServer(function(req, res) {}); 
server.listen(8080); 
var io = require('socket.io').listen(server); 
io.set('transports', ['websocket','flashsocket']); 
io.sockets.on('connection', function (socket) { 
    sockets.push(socket); 
    socket.on('disconnect', function() { 
     var i = sockets.indexOf(socket); 
     sockets.splice(i, 1); 
    }); 
    socket.on("data",function(d){ 
     console.log('data from flash: ',d); 
    }); 
    socket.write(JSON.stringify({message:"blah blah"})); 
}); 

我的任務是將它連接到AS3 Air應用程序。腳本看起來像這樣:

public class CustomSocket extends Socket { 

    public function CustomSocket(host:String = null, port:uint = 0) { 
     super(); 
     configureListeners(); 
     if (host && port) { 
      super.connect(host, port); 
     } 
    } 
    private function configureListeners():void { 
     addEventListener(Event.CLOSE, closeHandler); 
     addEventListener(Event.CONNECT, connectHandler); 
     addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); 
     addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); 
     addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler); 
    } 
    .... 
} 

它連接到插座沒有錯誤,但沒有發送或接收數據正在工作。只有連接事件被激發,就是這樣。 ProgressEvent.SOCKET_DATA永遠不會被觸發。另外,在連接上我發送一些數據到節點,從來沒有收到。

有什麼想法?

回答

2

想通了。而不是像網頁一樣使用socket.io,我必須在nodejs端使用TCP套接字連接。當我創建這樣的腳本時:

var net = require('net'); 
var net_server = net.createServer(function(socket) { 
    socket.write('blah blah \n'); 
    socket.on('data', function(chunk) { 

    }); 
    socket.on('error', function(err) {}); 
}); 
net_server.listen(8000); 

有雙向通信正在工作。