2013-07-10 118 views
6

我想用socket.io來連接我的unity3d程序與node.js服務器。連接Unity3D與Node.js

使用UnitySocketIO,我成功連接了客戶端和服務器。

但是,On或Emit方法不起作用。

有人可以幫我解決這個問題嗎?

void Start() { 

    string socketUrl = "http://127.0.0.1:50122"; 
    Debug.Log("socket url: " + socketUrl); 

    this.socket = new Client(socketUrl); 
    this.socket.Opened += this.SocketOpened; 
    this.socket.Message += this.SocketMessage; 
    this.socket.SocketConnectionClosed += this.SocketConnectionClosed; 
    this.socket.Error += this.SocketError; 

    this.socket.Connect(); 
} 

private void SocketOpened (object sender, EventArgs e) { 
    Debug.Log("socket opened");     // i got this message 
    this.socket.On ("message", (data) => { 
     Debug.Log ("message : " + data); 
    }); 
    this.socket.Emit("join", "abc"); 
    Debug.Log("Emit done");     // i got this message 
} 

....

io.sockets.on('connection', function (socket) { 

    console.log('connect');     // i got this message 

    socket.emit('message', 'Hello World!'); 

    socket.on('join', function (id) { 
     console.log('client joined with id ' + id); 
     socket.emit('message', 'Hello ' + id); 
    }); 
}); 
+0

Got this work?自己掙扎着。 – Jeff

+0

你最終解決了這個問題嗎?你把UnitySocketIO的dll文件放在哪裏? – Nikola

+0

@Nikola,只需把你的資產文件夾中的任何地方的dll文件。然後(對於c#),只需在腳本中添加'使用SocketIOClient;'。我不確定JavaScript的等價物是什麼,但不能很難弄清楚。 – Harrison

回答

2

你可能事件附着在錯誤的順序,嘗試這樣的:

void Start() { 
    string socketUrl = "http://127.0.0.1:50122"; 
    Debug.Log("socket url: " + socketUrl); 

    this.socket = new Client(socketUrl); 
    this.socket.Opened += this.SocketOpened; 
    this.socket.Message += this.SocketMessage; 
    this.socket.SocketConnectionClosed += this.SocketConnectionClosed; 
    this.socket.Error += this.SocketError; 

    this.socket.On("message", (data) => { 
     Debug.Log("message: " + data); 
    }); 

    this.socket.Connect(); 
} 

而對於節點:

io.sockets.on('connection', function(socket) { 
    console.log('client connected'); 
    socket.emit('message', 'Hello World!'); 
}); 

除了不允許客戶決定自己的ID,因爲它是「hac」在大多數情況下,「kable」。只有服務器應該做出重要決定而不是客戶端。

+0

感謝您的幫助,但'留言'的日誌仍然沒有出現。 – user1957032

+0

您可能希望將您的示例最小化,以便更容易地調試並找出它的工作方式,然後實現到Unity應用程序。 – moka