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完成一个实时聊天软件(前端部分)

swoole webSocket 聊天室示例

利用websocket实现聊天小应用

uniapp+websocket实现在线聊天

Android 使用WebSocket实现即时通讯功能,聊天功能

微信小程序之swoole/WebSocket创建聊天室(php)