mirror of https://github.com/zulip/zulip.git
ea6934c26d
Zulip has had a small use of WebSockets (specifically, for the code path of sending messages, via the webapp only) since ~2013. We originally added this use of WebSockets in the hope that the latency benefits of doing so would allow us to avoid implementing a markdown local echo; they were not. Further, HTTP/2 may have eliminated the latency difference we hoped to exploit by using WebSockets in any case. While we’d originally imagined using WebSockets for other endpoints, there was never a good justification for moving more components to the WebSockets system. This WebSockets code path had a lot of downsides/complexity, including: * The messy hack involving constructing an emulated request object to hook into doing Django requests. * The `message_senders` queue processor system, which increases RAM needs and must be provisioned independently from the rest of the server). * A duplicate check_send_receive_time Nagios test specific to WebSockets. * The requirement for users to have their firewalls/NATs allow WebSocket connections, and a setting to disable them for networks where WebSockets don’t work. * Dependencies on the SockJS family of libraries, which has at times been poorly maintained, and periodically throws random JavaScript exceptions in our production environments without a deep enough traceback to effectively investigate. * A total of about 1600 lines of our code related to the feature. * Increased load on the Tornado system, especially around a Zulip server restart, and especially for large installations like zulipchat.com, resulting in extra delay before messages can be sent again. As detailed in https://github.com/zulip/zulip/pull/12862#issuecomment-536152397, it appears that removing WebSockets moderately increases the time it takes for the `send_message` API query to return from the server, but does not significantly change the time between when a message is sent and when it is received by clients. We don’t understand the reason for that change (suggesting the possibility of a measurement error), and even if it is a real change, we consider that potential small latency regression to be acceptable. If we later want WebSockets, we’ll likely want to just use Django Channels. Signed-off-by: Anders Kaseorg <anders@zulipchat.com> |
||
---|---|---|
.. | ||
fixtures | ||
images | ||
__init__.py | ||
test_alert_words.py | ||
test_archive.py | ||
test_attachments.py | ||
test_audit_log.py | ||
test_auth_backends.py | ||
test_bots.py | ||
test_bugdown.py | ||
test_cache.py | ||
test_camo.py | ||
test_compatibility.py | ||
test_create_video_call.py | ||
test_custom_profile_data.py | ||
test_decorators.py | ||
test_digest.py | ||
test_docs.py | ||
test_email_change.py | ||
test_email_log.py | ||
test_email_mirror.py | ||
test_email_notifications.py | ||
test_embedded_bot_system.py | ||
test_event_queue.py | ||
test_events.py | ||
test_external.py | ||
test_feedback.py | ||
test_gitter_importer.py | ||
test_hipchat_importer.py | ||
test_home.py | ||
test_hotspots.py | ||
test_i18n.py | ||
test_import_export.py | ||
test_integrations_dev_panel.py | ||
test_legacy_subject.py | ||
test_link_embed.py | ||
test_logging_handlers.py | ||
test_management_commands.py | ||
test_mattermost_importer.py | ||
test_message_edit_notifications.py | ||
test_messages.py | ||
test_middleware.py | ||
test_migrations.py | ||
test_muting.py | ||
test_narrow.py | ||
test_new_users.py | ||
test_onboarding.py | ||
test_openapi.py | ||
test_outgoing_webhook_interfaces.py | ||
test_outgoing_webhook_system.py | ||
test_populate_db.py | ||
test_presence.py | ||
test_push_notifications.py | ||
test_queue.py | ||
test_queue_worker.py | ||
test_reactions.py | ||
test_realm.py | ||
test_realm_domains.py | ||
test_realm_emoji.py | ||
test_realm_export.py | ||
test_realm_filters.py | ||
test_report.py | ||
test_retention.py | ||
test_service_bot_system.py | ||
test_sessions.py | ||
test_settings.py | ||
test_signup.py | ||
test_slack_importer.py | ||
test_slack_message_conversion.py | ||
test_soft_deactivation.py | ||
test_subdomains.py | ||
test_submessage.py | ||
test_subs.py | ||
test_templates.py | ||
test_thumbnail.py | ||
test_timestamp.py | ||
test_tornado.py | ||
test_transfer.py | ||
test_tutorial.py | ||
test_type_debug.py | ||
test_typing.py | ||
test_unread.py | ||
test_upload.py | ||
test_urls.py | ||
test_user_groups.py | ||
test_user_status.py | ||
test_users.py | ||
test_webhooks_common.py | ||
test_widgets.py | ||
test_zcommand.py | ||
test_zephyr.py |