【问题标题】:socketio client not connected on ubunto server with sockeio client for iossocketio 客户端未在 ubuntu 服务器上与 ios 的 socketio 客户端连接
【发布时间】:2018-02-27 06:54:30
【问题描述】:

我有这个在 windows 10 上本地运行的 api 在 windows 站侦听具有命名空间 "vendores" 的套接字我可以连接窗体 ios 应用程序

let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let myJSON = [
            "lng":String(location.coordinate.longitude),
            "lat":String(location.coordinate.latitude),
            "idvendedor":appDelegate.idSeller
        ]
        print("updating location")

        let socket = SocketIOClient(socketURL: URL(string: self.constans.addres)!,config: [.connectParams(["accessToken" : appDelegate.token]),.forcePolling(true),.nsp("/vendedor"), .log(true)])
        print("el url del token: \(self.constans.addres)/vendedor")

        socket.on("connect") {data, ack in
            print("socket connected")
            socket.emit("setLocation",myJSON)
            print("Mostrando el Json: \(myJSON)")
        }
        socket.on("locationChanged", callback: {_,_ in
            print("disconnected")
            socket.disconnect()
        })
        print("send to connect ")
        socket.connect()

在节点上运行的服务器端有这个代码

vendedorSocket.on('connection', function (socket) {
        console.log('Un vendedor se ha conectado');
        socket.on('setLocation', function(data){
            try{
                    assert(data.lng, "No longitude provided.");
                    assert(data.lat, "No latitude provided");
                    assert(data.idvendedor, "No idvendedor provided");
                    console.log('Ha cambiado la ubicación de un vendedor');
                    app.models.mapa.find({where: {vendedorId: data.idvendedor, activa: true }}, function(err, ubicaciones_inst) {
                        if (err) throw(err);
                        if(ubicaciones_inst && ubicaciones_inst.length > 0){
                            ubicaciones_inst.forEach(function (ubicacion) {
                                ubicacion.activa = false;
                                ubicacion.save();
                            });
                        }
                    });
                    var geopoint = {lat: data.lat, lng: data.lng};
                    app.models.mapa.create({coordenadas: geopoint, activa: true, vendedorId: data.idvendedor, created: Date.now()}, function(err, ubicacion_inst){
                        if(err) throw(err);
                        else if(ubicacion_inst){
                            socket.emit('locationChanged', ubicacion_inst);
                        }
                    });
            }
            catch(ex){
                throwSocketException(socket, ex.message);
            }
        });
    });

连接到本地 api 后,我得到了来自连接的 api 套接字的响应,实际上在 db 中有一些数据与位置数据一起发送到服务。 但是当使用在云上运行的服务运行应用程序时,套接字永远不会连接这个 xcode 中显示的日志

2017-09-18 12:07:03.802 vasoking[1036:26086] LOG SocketEnginePolling: 收到投票消息:1:3 2017-09-18 12:07:03.808 vasoking[1036:26086] LOG SocketEngine:收到消息:3 2017-09-18 12:07:03.812 vasoking[1036:26086] LOG SocketEnginePolling:做轮询 GET http://192.241.223.xxx:8003/socket.io/?transport=polling&b64=1&accessToken=ISWp70VbUX7YfHLHzs3ayYySADhWeMnT1k94Vuwsn1g2zr069lvyBV7JTOVEyEYj&sid=rGP6Zohesfhk0yE9AAAT 2017-09-18 12:07:06.100 vasoking[1036:25994] LOG SocketEngine:写入 民意调查:有数据:假 2017-09-18 12:07:06.100 vasoking[1036:25817] LOG SocketEngine:写入投票:有数据:false 2017-09-18 12:07:06.106 vasoking[1036:25994] LOG SocketEnginePolling: 发送 民意调查:作为类型:2 2017-09-18 12:07:06.107 vasoking[1036:25817] LOG SocketEnginePolling:发送投票:作为类型:2 2017-09-18 12:07:06.108 vasoking[1036:25994] LOG SocketEnginePolling:创建的 POST 字符串:1:2 2017-09-18 12:07:06.110 vasoking[1036:25817] LOG SocketEnginePolling: 创建的 POST 字符串:1:2 2017-09-18 12:07:06.113 vasoking[1036:25994] 日志 SocketEnginePolling:发布 2017-09-18 12:07:06.114 vasoking[1036:25817] LOG SocketEnginePolling: POSTing 2017-09-18 12:07:06.117 vasoking[1036:25994] LOG SocketEnginePolling: Doing 投票 POST http://192.241.223.xxx:8003/socket.io/?transport=polling&b64=1&accessToken=ISWp70VbUX7YfHLHzs3ayYySADhWeMnT1k94Vuwsn1g2zr069lvyBV7JTOVEyEYj&sid=eBFLEj9Lyq5gFsOTAAAX 2017-09-18 12:07:06.119 vasoking[1036:25817] LOG SocketEnginePolling: 进行轮询 POST http://192.241.223.xxx:8003/socket.io/?transport=polling&b64=1&accessToken=ISWp70VbUX7YfHLHzs3ayYySADhWeMnT1k94Vuwsn1g2zr069lvyBV7JTOVEyEYj&sid=tqm-6Kb6cYkK5XxlAAAY

所以没有数据被传输,当然也没有来自服务器的回答,所以可能是什么问题

【问题讨论】:

    标签: ios node.js swift websocket socket.io


    【解决方案1】:

    点击此链接https://github.com/socketio/socket.io-client-swift/issues/744 在 SocketIOClient.swift 中,当我将这段代码放入

    open func engineDidOpen(reason: String):
    if reason == "Connect" {
    joinNamespace(nsp)
    }
    

    瞧,这很完美,我猜这是 windows 和运行节点的 linux 服务器之间的问题,因为在 windows 上没有它也会连接到它,但是没有它的 linux 服务器不会连接到命名空间

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-16
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 2020-02-13
      • 1970-01-01
      • 2013-05-13
      • 1970-01-01
      相关资源
      最近更新 更多