来自Socket.IO-Client-Swift的Socket.io POST请求

Mil*_*dia 27 python sockets linux flask ios

我通过Python Flask在Apache服务器上运行socket.io.我们将它集成到iOS应用程序中(使用Socket.IO-Client-Swift库),我们遇到了一个奇怪的问题.

从应用程序中的客户端代码(用Swift编写),我可以查看实际的连接日志(XCode中的客户端),并查看从客户端的IP和正在进行的请求建立的连接.客户端从不接收来自套接字服务器的信息(或任何信息;甚至在使用全局事件响应处理程序时).

我在HTML页面上用Javascript编写了一个非常简单的测试脚本,并以这种方式发送请求并收到适当的响应.话虽如此,它似乎可能是iOS的一个问题.我发现了这些文章(但没有一个帮助解决问题):

https://github.com/nuclearace/Socket.IO-Client-Swift/issues/95 https://github.com/socketio/socket.io-client-swift/issues/359

我的下一个想法是扩展socket.io的日志记录,以确切地知道哪些数据被POST到套接字命名空间.有没有办法准确记录进入服务器的数据(请记住,我设置的服务器端的"on"挂钩没有获取任何数据;我试图从那里记录它但是它似乎没有那么远).

我找到了Linux的mod_dumpio来记录所有POST请求,但我不确定它将如何与多线程和套接字服务器一起使用.

有关如何获取确切数据的任何想法,以便我们至少可以解决语法问题并确保数据在发送到服务器时没有格式错误?

谢谢!

更新

在本地测试时,我们使它工作(这是Swift代码中的一个设置,其中命名空间未被正确声明).现在这在localhost上工作正常但我们在发送到Apache服务器时遇到了完全相同的问题.

我们没有使用mod_wsgi(据我所知;我对mod_wsgi比较新,为任何无知道歉).我们曾经有一个称为主应用程序脚本来运行一个.wsgi文件,但我们不得不改变,由于mod_wsgi的不兼容瓶SocketIO(如uWSGI网页服务器部说这里).我现在运行脚本的方式是使用supervisord将.py文件作为守护程序运行(特别是使用它会在服务器崩溃的情况下自动启动).

在本地,一旦我们通过pip安装了eventlet模块,它就运行得很好.当我pip freeze在服务器上运行我的虚拟环境时,安装了eventlet.我卸载并重新安装它只是为了看看是否清除了什么并且没有做任何事情.我的本地副本上没有其他Python模块似乎会影响这一点.

另外要记住的是,在初始化应用程序的函数中,我们将端口更改为端口80:

socketio.run(app,host='0.0.0.0',port=80)
Run Code Online (Sandbox Code Playgroud)

因为我们有其他API函数通过指向此应用程序中的服务器的域运行.我不确定这是否会影响任何事情,但在本地版本上似乎并不重要.

我再次走向死胡同,并试图找到任何有用的东西.谢谢你的协助!

另一个更新

我还不确定发生了什么,但我们继续并重写了一些代码,确保特别注意每个套接字事件on函数中的命名空间声明.现在工作正常.当我得到更多详细信息时,我会将它们发布在这里,因为我认为这将对其他有相同问题的人有用.虽然我们从未真正完全弄清楚原始问题的答案,但该线程还有一些关于如何调试/记录这些类型问题的非常有价值的信息.

Ken*_*ers 3

你在服务器端使用flask-socketio吗?如果是的话,构造函数中可以进行很多调试。

socketio = SocketIO(应用程序,async_mode = async_mode,logger = True,engineio_logger = True)