WebSocket 聊天异步示例崩溃
Posted
技术标签:
【中文标题】WebSocket 聊天异步示例崩溃【英文标题】:WebSocket Chat Async Example Crash 【发布时间】:2014-01-21 11:57:27 【问题描述】:我一直在尝试在 Apple Mac 上运行此处提供的 websocket 聊天示例。 https://github.com/unbit/uwsgi/blob/master/tests/websockets_chat_async.py
但运行此示例会导致 uwsgi 中出现段错误。
我已将这个示例复制粘贴到 websocket.py 并使用以下命令运行服务器
uwsgi --http :8080 --http-websockets --wsgi-file websocket.py --venv ../../python2-wow
当我访问 URL 时,我会收到用于建立连接的正确消息。但是随后服务器因此段错误而崩溃
!!! uWSGI process 29129 got Segmentation Fault !!!
*** backtrace of 29129 ***
0 uwsgi 0x00000001078b5ec0 uwsgi_backtrace + 48
1 uwsgi 0x00000001078b6371 uwsgi_segfault + 49
2 libsystem_platform.dylib 0x00007fff96b2c5aa _sigtramp + 26
3 ??? 0x0000000000000000 0x0 + 0
4 uwsgi 0x0000000107897b4e async_add_fd_read + 206
5 uwsgi 0x00000001078c8979 py_eventfd_read + 89
6 Python 0x00000001079d214d PyEval_EvalFrameEx + 8080
7 Python 0x00000001079d0093 PyEval_EvalCodeEx + 1641
8 Python 0x0000000107977796 PyFunction_SetClosure + 809
9 Python 0x0000000107959f72 PyObject_Call + 101
10 Python 0x00000001079d601f PyEval_CallObjectWithKeywords + 93
11 uwsgi 0x00000001078c6dc7 python_call + 23
12 uwsgi 0x00000001078c8df9 uwsgi_request_wsgi + 889
13 uwsgi 0x000000010787b7e3 wsgi_req_recv + 291
14 uwsgi 0x00000001078b38a5 simple_loop_run + 229
15 uwsgi 0x00000001078ba6e2 uwsgi_ignition + 226
16 uwsgi 0x00000001078ba5ae uwsgi_worker_run + 670
17 uwsgi 0x00000001078b9d26 uwsgi_start + 5078
18 uwsgi 0x00000001078b81a3 main + 7331
19 libdyld.dylib 0x00007fff8c6ce5fd start + 1
*** end of backtrace ***
显然崩溃就在这条线上
uwsgi.wait_fd_read(websocket_fd, 3)
在这里难住了。需要帮助。
【问题讨论】:
你缺少 --async 选项 不确定是否需要 --http-websockets。还要确保你有最新的 uWSGI。 好的,我尝试运行它,发现它显然需要--ugreen。但是,尽管我没有更多错误,但它并没有真正起作用。也许这种原生异步模式已经过时了,你应该使用更新的基于 gevent 的方法。 ugreen/swapcontext 在 osx 上不再工作(苹果在几个版本前破坏了它),所以在 mac 上你只能使用 gevent(或 greenlet,或经典线程) @roberto 我在 Ubuntu 上运行它,但它不起作用(尽管我没有错误)。我也尝试过 greenlet 模式,但 uWSGI 没有识别出我想的那样(得到错误,即在没有协程引擎的情况下使用了异步)。 【参考方案1】:我让它与 --async=100
和 --ugreen
选项一起工作。
请注意,您可以使用更新的 API:native WebSocket support 和通用 gevent-based async support。
【讨论】:
以上是关于WebSocket 聊天异步示例崩溃的主要内容,如果未能解决你的问题,请参考以下文章
利用websocket+Vuex完成一个实时聊天软件(前端部分)