【问题标题】:Combining java and nodejs for android app结合java和nodejs的android应用程序
【发布时间】:2012-09-17 05:50:22
【问题描述】:

我正在开发基于回合制的 Android 游戏,并且我选择 Nodejs 作为服务器端。我已经探索了大约两周的时间,如何从 Android 客户端与 Nodejs 服务器进行通信。有什么方法可以在两者之间进行交流。

如果有人对此类项目有任何经验,请帮助我。

【问题讨论】:

  • 我对nodejs一无所知,但我假设您并不真正关心Android,而是使用任何类型的基于套接字的基础设施真正与您的nodejs服务器交互......(即, 没有什么能让这个 Android 特定而不是 java 特定..)

标签: java android node.js multiplayer


【解决方案1】:

根据您的游戏在客户端和服务器之间通信的要求,有很多类似的选项。例如,在此处查找“Android 的 TCP 客户端”会显示类似 this 的答案。如果服务器和客户端之间的快速更新很重要,那么 UDP 是一种选择,如果您的游戏可以处理中间丢失的一些数据包。

除了 TCP/UDP 之外,您还可以使用 WebSockets for Android 之类的东西。

【讨论】:

    【解决方案2】:

    结合 Android 和 nodejs 是没有问题的。首先,您必须定义一个中间件。您可以使用 REST-Webservices 或任何其他技术在节点服务器和 android 客户端之间进行通信。有许多标准的 API 和协议。我会使用 Websocket 进行通信。您可以在此处找到支持 WebSocket 的 Android / Node.js API:

    【讨论】:

      【解决方案3】:

      您可以在 Android 中使用 Volley 发出 json POSTGET 请求。

      对于 NODE JS,您可以使用 node 的内置 http 模块来创建一个简单的 HTTP 服务器,然后从 req 对象接收数据。

      const http=require('http');
      const stringDecoder=require('string_decoder').StringDecoder;
      
      var httpServer=http.createServer(function(req,res){    
          unifinedServer(req,res);
      });
      //Just another method. 
      var unifinedServer=function(req,res){
      
          var decoder=new stringDecoder('utf-8');
          var buffer='';
          //reading the post data. 
          req.on('data',function(data){
              buffer+=decoder.write(data);
          });
          //Reading of data is completed. 
          req.on('end',function(){
              buffer+=decoder.end(); 
          // Do what ever you want to do with the POST data. 
          });    
      }
      //The Server is listening on a specific port. 
      httpServer.listen(7000,function(){
          console.log("Server is now listening on Port..."+7000);
      });
      

      对于 Android 代码,您可以使用 volley 执行此操作:

      String url = "http://example.com";
      
      JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
              (Request.Method.POST, url, postJsonObject, new Response.Listener<JSONObject>() {
      
          @Override
          public void onResponse(JSONObject response) {
              mTextView.setText("Response: " + response.toString());
          }
      }, new Response.ErrorListener() {
      
          @Override
          public void onErrorResponse(VolleyError error) {
              // TODO: Handle error
      
          }
      });
      
      // Access the RequestQueue through your singleton class.
      MySingleton.getInstance(this).addToRequestQueue(jsonObjectRequest);
      

      【讨论】:

        猜你喜欢
        • 2017-11-10
        • 1970-01-01
        • 2017-10-18
        • 2019-10-25
        • 2013-07-02
        • 2018-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多