2016-11-22 7 views
0

私は、TCPサーバーとしてnode.jsをテストしています。今後のプロジェクトではクライアントとしてUnity3dをテストしています。Unity3d - Node.js tcp connectionクライアントがすぐに更新しない

サーバーからデータを送受信できる単純なチャットインターフェイスunity3dを作成します。すべて私は2つのクライアント、Unity editorUnity applicationと私はメッセージを送信するたびにサーバーがすぐにピックアップし、terminalに表示すると、私はテストするまで正常に動作するようです。しかし、クライアント側では、クライアントにフォーカスするためにクリックするとディスプレイインターフェイスが更新されるだけです(Unity editorまたはUnity application)。

以下の私のコードは次のとおりです。

のNode.js

net = require('net'); 
var clients = []; 

net.createServer(function (socket) { 

    socket.name = socket.remoteAddress + ":" + socket.remotePort 
    clients.push(socket); 

    socket.write("Welcome " + socket.name + "\n"); 
    broadcast(socket.name + " joined the chat\n", socket); 

    socket.on('data', function (data) { 
    broadcast(socket.name + "> " + data, socket); 
    }); 

    socket.on('end', function() { 
    clients.splice(clients.indexOf(socket), 1); 
    broadcast(socket.name + " left the chat.\n"); 
    }); 

    function broadcast(message, sender) { 
    clients.forEach(function (client) { 
     if (client === sender) return; 
     client.write(message); 
    }); 
    process.stdout.write(message) 
    } 

}).listen(5000); 

// Put a friendly message on the terminal of the server. 
console.log("Chat server running at port 5000\n"); 

client.cs何が不足している

using UnityEngine; 
using UnityEngine.UI; 
using System.Collections; 
using System.Net.Sockets; 
using System.IO; 

public class client : MonoBehaviour { 

    private bool socketReady; 
    private TcpClient socket; 
    private NetworkStream stream; 
    private StreamWriter writer; 
    private StreamReader reader; 

    public Text servermessage; 
    public InputField input; 

    // Use this for initialization 
    void Start() { 
     ConnectToServer(); 
    } 

    // Update is called once per frame 
    void Update() { 
     if(socketReady){ 
      if(stream.DataAvailable){ 
       string data = reader.ReadLine(); 
       if(data != null){ 
        OnIncomingData (data); 
       } 
      } 
     } 
    } 

    public void ConnectToServer(){ 
     if(socketReady) 
      return; 

     string host = "127.0.0.1"; 
     int port = 5000; 

     try 
     { 
      socket = new TcpClient(host,port); 
      stream = socket.GetStream(); 
      writer = new StreamWriter(stream); 
      reader = new StreamReader(stream); 
      socketReady = true; 

      Debug.Log("socket :"+ reader.ToString()); 
     } 
     catch (System.Exception e) 
     { 
      Debug.Log("socket error :"+ e); 
     } 

    } 

    private void OnIncomingData(string data){ 
     Debug.Log ("server : "+ data); 
     servermessage.text = data; 
    } 

    public void OnOutgoingData(string data){ 
     if (!socketReady) 
      return; 
     if (input.text == "") { 
      writer.WriteLine (data); 
     } else { 
      writer.WriteLine (input.text); 
     } 
     writer.Flush(); 
     input.text = ""; 
    } 
} 

?すべてのクライアントインターフェイスで即時更新が表示されるようにするにはどうすればよいですか?

+0

純粋にコメント、これらの日、それは信じられないほど簡単だそれをオンにし、そしてそれはあなたが

参照焦点を当てていない場合であっても更新する必要がありますにだけ使用back4app.com、firebase.comなど! – Fattie

答えて

1

これはあなたのコードに起因するものではありませんが、Unityエディタによるものです。デフォルトでは、ユニティエディタはバックグラウンドでアプリケーションを実行しません。あなたが変えることができます

はランイン・バックグラウンドEdit > Project Settings > Settings-Player

にフィールドRun in backgroundがあるはずです。またRun In background

関連する問題