【问题标题】:Simple Sails.js and Android Example简单 Sails.js 和 Android 示例
【发布时间】:2015-06-21 10:10:27
【问题描述】:

我真的很难使用sails.io 和android 打开套接字连接。我目前想要实现的只是在sails.js服务器的控制台中打印socketid。

安卓端:

我正在使用 nkzwa 的 socket.io.client 库 (编译'com.github.nkzawa:socket.io-client:0.4.2')

这是我在 AsyncTask 内的 android 中使用的代码:

private Socket mSocket;
    {
        try {
            mSocket = IO.socket("http://192.168.0.80:3000/batches/");
        } catch (URISyntaxException e) {}
    }
@Override
    protected Void doInBackground(Void... params) {
        mSocket.connect();
        mSocket.emit("getSocketID");
}

我的批次控制器看起来像这样:

module.exports = {
     getSocketID: function(req, res) {
        if (!req.isSocket) return res.badRequest();

        var socketId = sails.sockets.id(req.socket);
        // => "BetX2G-2889Bg22xi-jy"
        console.log(socketId)

        return res.ok('My socket ID is: ' + socketId);
    }
}

在运行任务时,我认为我会在我的sails 实例中输出控制台日志。

谁能看出我做错了什么?

【问题讨论】:

  • 总是在所有地方打开调试并在此处提问之前附上日志。你在两个控制台中究竟得到了什么? (节点控制台和 adb logcat)
  • 节点控制台是空的,android没有相关的。

标签: android node.js sockets sails.js


【解决方案1】:

你能不能先创建一个node客户端,然后尝试连接socket?我不确定您是否确定风帆中的服务器端正常工作。我对吗?

【讨论】:

  • 我可以为您提供风帆插座方面的帮助,但我没有 android 方面的经验来帮助您。
【解决方案2】:

我是这样工作的:

 private Socket mSocket;
    {
        try {
            mSocket = IO.socket("http://192.168.0.80:3000");
        } catch (URISyntaxException e) {
            throw new RuntimeException(e);
        }
    }

 JSONObject obj1 = new JSONObject();
        try {
            obj1.put("url","/batches/getSocketID");
        } catch (JSONException e) {
            e.printStackTrace();
        }
        mSocket.emit("get",obj1);
        mSocket.connect();

【讨论】:

  • 如何使用这段代码获取 URL JSON 输出?
  • 对于这个实例,没有来自服务器的 JSON 回复。为此,您遵循类似的模式,但添加一个用于返回数据的处理程序,例如 mSocket.on("myurl", onDataReceived);然后 private Emitter.Listener onDataReceived = new Emitter.Listener() { @Override public void call(final Object... args) {}
  • 谢谢!我对此代码有另一个问题/疑问^^我的网络套接字仅在用户连接时才起作用。那么如何更改标头以保持套接字和 http Web 服务之间的会话?
  • 不确定那个,最好问一个新问题。
【解决方案3】:

要发出请求,请使用 url 作为 event 并在 emit 方法中使用 ack 获得响应。

如果您发现以下错误 Error (SAILS:HOOK:SOCKETS:PARSE_VIRTUAL_REQ):: Failed to parse incoming socket.io request 将 http://192.168.11.111:1337 更改为 http://192.168.11.111:1337?__sails_io_sdk_version=0.13.5

private Socket mSocket;
{
    try {
        mSocket = IO.socket("http://192.168.0.80:3000");
    } catch (URISyntaxException e) {
        throw new RuntimeException(e);
    }
}

JSONObject jsonObject = new JSONObject();

try {
    jsonObject.put("url", "/records");
} catch (JSONException e) {
    e.printStackTrace();
}

mSocket.emit("get", jsonObject, new Ack() {
    @Override
    public void call(Object... args) {
        Log.d(TAG, "records: " + args[0].toString());
    }
});

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
  • 2016-02-19
  • 2016-05-30
  • 2013-12-08
  • 2018-06-13
  • 2011-03-13
  • 1970-01-01
相关资源
最近更新 更多