简单的 Sails.js 和 Android 示例

Simple Sails.js and Android Example

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

Android 边:

我正在使用 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");
}

我的 batchescontroller 看起来像这样:

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 实例中输出控制台日志。

谁能看出我做错了什么?

能否先尝试创建一个节点客户端,然后尝试连接套接字?我不确定您是否确定 sails 中的服务器端是否正常工作。我对吗?

我是这样工作的:

 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 作为 event 并在 emit 方法中使用 ack 获得响应。

如果您发现以下错误 Error (SAILS:HOOK:SOCKETS:PARSE_VIRTUAL_REQ):: Failed to parse incoming socket.io requesthttp://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());
    }
});