# Socket.IO

Socket.IO is a technology for bidirectional, low-latency communication between servers and clients, using WebSocket when possible and falling back to HTTP long-polling.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Choose your fighter: benchmarking 5 WebSocket servers for Node.js

DevFeed: [Choose your fighter: benchmarking 5 WebSocket servers for Node.js](<https://devfeed.tech/articles/choose-your-fighter-benchmarking-5-websocket-servers-for-node-js-19781.md>)

Original publisher: [Read original article](<https://evilmartians.com/chronicles/choose-your-fighter-benchmarking-5-websocket-servers-for-nodejs>)

Author: Travis Turner (richardturner@evilmartians.com)

Published: 2026-06-24T00:00:00Z

Content type: comparison

Language: en

Sources: [Evil Martians](<https://devfeed.tech/sources/evil-martians.md>)

Topics: [WebSocket](<https://devfeed.tech/topics/websocket.md>), [Node.js](<https://devfeed.tech/topics/node-js.md>), [benchmarking](<https://devfeed.tech/topics/benchmarking.md>), [Socket.IO](<https://devfeed.tech/topics/socket-io.md>), [real-time](<https://devfeed.tech/topics/real-time.md>), [Latency](<https://devfeed.tech/topics/latency.md>)

Tags: [benchmark](<https://devfeed.tech/tags/benchmark.md>), [benchmarking](<https://devfeed.tech/tags/benchmarking.md>), [frontend-real-time](<https://devfeed.tech/tags/frontend-real-time.md>), [latency](<https://devfeed.tech/tags/latency.md>), [network](<https://devfeed.tech/tags/network.md>), [node](<https://devfeed.tech/tags/node.md>), [node-js](<https://devfeed.tech/tags/node-js.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [performance](<https://devfeed.tech/tags/performance.md>), [performance-scale](<https://devfeed.tech/tags/performance-scale.md>), [real-time](<https://devfeed.tech/tags/real-time.md>), [websocket](<https://devfeed.tech/tags/websocket.md>)

### AI overview

Evil Martians compare five WebSocket server options for Node.js: Socket.io, Socket.io with Connection State Recovery, uWebSockets.js, AnyCable OSS, and AnyCable Pro. The benchmark finds similar raw latency at 10,000 subscribers, while resilience under network drops, reconnect storms, and broadcast load separates the systems. AnyCable delivered all messages during simulated drops and led broadcast throughput; the other systems showed different recovery, connection-capacity, or message-loss trade-offs.

### Source excerpt

Evil Martians benchmarked five WebSocket servers for Node.js: Socket.io, uWebSockets.js, and AnyCable (OSS and Pro). How we caught our own load generator lying, and how to make WebSocket benchmark numbers honest.

## WebSocket support is now in Public Beta

DevFeed: [WebSocket support is now in Public Beta](<https://devfeed.tech/articles/websocket-support-is-now-in-public-beta-1199.md>)

Original publisher: [Read original article](<https://vercel.com/changelog/websocket-support-is-now-in-public-beta>)

Author: Casey Gowrie

Published: 2026-06-22T00:00:00Z

Content type: release

Language: en

Sources: [Vercel News](<https://devfeed.tech/sources/vercel-news.md>)

Topics: [WebSocket](<https://devfeed.tech/topics/websocket.md>), [Vercel](<https://devfeed.tech/topics/vercel.md>), [Node.js](<https://devfeed.tech/topics/node-js.md>), [Express](<https://devfeed.tech/topics/express.md>), [Socket.IO](<https://devfeed.tech/topics/socket-io.md>), [Streaming](<https://devfeed.tech/topics/streaming.md>)

Tags: [communication](<https://devfeed.tech/tags/communication.md>), [node-js](<https://devfeed.tech/tags/node-js.md>), [server](<https://devfeed.tech/tags/server.md>), [streaming](<https://devfeed.tech/tags/streaming.md>), [vercel](<https://devfeed.tech/tags/vercel.md>)

### AI overview

Vercel Functions now support WebSocket connections in public beta, enabling bidirectional communication for realtime features such as AI streaming, chat, and collaborative applications. The connections run on Fluid compute and use the same limits and pricing as other Function invocations, with Active CPU pricing applying only while messages are processed.

### Source excerpt

Vercel Functions can now serve WebSocket connections, enabling bidirectional communication between clients and server-side code on Vercel. Use WebSockets for realtime features such as interactive AI streaming, chat, and collaborative apps. WebSocket connections run on Fluid compute and follow the same limits and pricing as other Function invocations. With Active CPU pricing, billing only applies to the time your Function spends processing messages, not idle connection time. You can serve WebSocket connections using standard Node.js libraries, with no additional configuration: Higher-level libraries like Socket.IO are also supported. Read the documentation to get started. Read more

## Run for your money: Engineering a treadmill that prints store credit

DevFeed: [Run for your money: Engineering a treadmill that prints store credit](<https://devfeed.tech/articles/run-for-your-money-engineering-a-treadmill-that-prints-store-credit-1426.md>)

Original publisher: [Read original article](<https://shopify.engineering/how-we-built-a-gamified-treadmill>)

Author: Nikola Draca

Published: 2025-11-25T13:31:13Z

Content type: article

Language: en

Sources: [Shopify Engineering](<https://devfeed.tech/sources/shopify-engineering.md>), [Shopify Engineering - Shopify Engineering](<https://devfeed.tech/sources/shopify-engineering-shopify-engineering.md>)

Topics: [Shopify](<https://devfeed.tech/topics/shopify.md>), [Extension](<https://devfeed.tech/topics/extension.md>), [Barcode](<https://devfeed.tech/topics/barcode.md>), [real-time](<https://devfeed.tech/topics/real-time.md>), [Python](<https://devfeed.tech/topics/python.md>), [Socket.IO](<https://devfeed.tech/topics/socket-io.md>), [Hardware](<https://devfeed.tech/topics/hardware.md>)

Tags: [checkout](<https://devfeed.tech/tags/checkout.md>), [code](<https://devfeed.tech/tags/code.md>), [customer](<https://devfeed.tech/tags/customer.md>), [data](<https://devfeed.tech/tags/data.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [events](<https://devfeed.tech/tags/events.md>), [extensions](<https://devfeed.tech/tags/extensions.md>), [hardware](<https://devfeed.tech/tags/hardware.md>), [python](<https://devfeed.tech/tags/python.md>), [real-time](<https://devfeed.tech/tags/real-time.md>), [retail](<https://devfeed.tech/tags/retail.md>), [sensor](<https://devfeed.tech/tags/sensor.md>), [shopify](<https://devfeed.tech/tags/shopify.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

Shopify and Endorphins Running built a gamified manual treadmill for the 2025 NYC marathon weekend. A pace sensor sent Bluetooth FTMS data to a Python script, while Socket.IO and a Shopify POS UI extension connected the running experience to store-credit redemption. Participants earned credit for maintaining a selected pace and received a barcode for applying their discount at checkout.

### Source excerpt

We combined FTMS sensors, Socket.IO, and POS UI extensions to turn a manual treadmill into a discount-printing machine.

## Getting Started with Socket.IO: Building Real-Time Web Applications

DevFeed: [Getting Started with Socket.IO: Building Real-Time Web Applications](<https://devfeed.tech/articles/getting-started-with-socket-io-building-real-time-web-applications-26511.md>)

Original publisher: [Read original article](<https://medium.com/engineering-housing/getting-started-with-socket-io-building-real-time-web-applications-0bd5b9c303e2?source=rss----3a69e32e2594---4>)

Author: Jitendra Kumar

Published: 2024-06-12T06:49:56Z

Content type: tutorial

Language: en

Sources: [Housing.com](<https://devfeed.tech/sources/housing-com.md>)

Topics: [Socket.IO](<https://devfeed.tech/topics/socket-io.md>), [WebSocket](<https://devfeed.tech/topics/websocket.md>), [Node.js](<https://devfeed.tech/topics/node-js.md>), [HTTP](<https://devfeed.tech/topics/http.md>), [servers](<https://devfeed.tech/topics/servers.md>)

Tags: [client-library](<https://devfeed.tech/tags/client-library.md>), [event](<https://devfeed.tech/tags/event.md>), [http](<https://devfeed.tech/tags/http.md>), [latency](<https://devfeed.tech/tags/latency.md>), [node-js](<https://devfeed.tech/tags/node-js.md>), [real-time](<https://devfeed.tech/tags/real-time.md>), [server](<https://devfeed.tech/tags/server.md>), [web-applications](<https://devfeed.tech/tags/web-applications.md>), [websocket](<https://devfeed.tech/tags/websocket.md>)

### AI overview

This tutorial introduces Socket.IO as a Node.js server-side library for low-latency, bidirectional, event-based communication. It explains the client-server connection process, including the HTTP handshake, transport selection, optional upgrade to WebSocket, real-time messaging, and heartbeat keep-alive.

### Source excerpt

What is Socket.io ? Socket.IO is a server-side library for nodejs that enables low-latency, bidirectional and event-based communication between a client and a server using client-server architecture while it is a wrapper around WebSockets For Node.js, it is super easy and simple to use especially when dealing with chat messages or Real-time data. Socket Client-Server Architecture How persistent bi-directional connection is established between client(s) and server ? The connection process between a Socket.IO client and server involves several steps. Below is a detailed breakdown of the key steps: 1. Handshake Initialization: The client initiates a connection to the Socket.IO server by sending an HTTP request (often a GET request) to the server using constructor provided by socket-io.client library. // Connect to the server (URL is optional if both client and server are at same origin ) const socket = io('http://localhost:3000'); The request includes a specific path, typically /socket.io/, and it may also include query parameters indicating the supported Socket.IO protocol version (EIO=3), transports, and other details. Example : GET /socket.io/?EIO=3&transport=polling&t=timestamp 2. Server Handshake Response: The Socket.IO server receives the initial HTTP request and responds with a handshake. The response includes the selected transport mechanism and a unique session ID (sid) that will be used to identify the connection. 3. Connection Upgrade (Optional): If the client and server both support WebSocket and agree to use it, they may negotiate to upgrade the connection from HTTP to WebSocket. This is an optimization for more efficient and bidirectional communication. 4. Transport Initialization: Based on the handshake response, the client initializes the chosen transport (e.g., WebSocket, polling). If using WebSocket, a WebSocket connection is established directly. If using polling, the client may start polling the server for updates. 5. Real-Time Communication: Once t

## Building a Real-Time Chat Application with WebSockets

DevFeed: [Building a Real-Time Chat Application with WebSockets](<https://devfeed.tech/articles/building-a-real-time-chat-application-with-websockets-28412.md>)

Original publisher: [Read original article](<https://banes.dev/building-a-real-time-chat-application-with-websockets/>)

Author: admin

Published: 2024-05-06T07:40:48Z

Content type: tutorial

Language: en

Sources: [Posts on Chris Banes](<https://devfeed.tech/sources/posts-on-chris-banes.md>)

Topics: [WebSocket](<https://devfeed.tech/topics/websocket.md>), [real-time](<https://devfeed.tech/topics/real-time.md>), [Socket.IO](<https://devfeed.tech/topics/socket-io.md>), [App](<https://devfeed.tech/topics/app.md>), [Node.js](<https://devfeed.tech/topics/node-js.md>), [servers](<https://devfeed.tech/topics/servers.md>), [browser](<https://devfeed.tech/topics/browser.md>), [Security](<https://devfeed.tech/topics/security.md>), [client](<https://devfeed.tech/topics/client.md>), [Sanitization](<https://devfeed.tech/topics/sanitization.md>), [Authentication](<https://devfeed.tech/topics/authentication.md>), [Authorization](<https://devfeed.tech/topics/authorization.md>)

Tags: [app](<https://devfeed.tech/tags/app.md>), [authentication](<https://devfeed.tech/tags/authentication.md>), [authorization](<https://devfeed.tech/tags/authorization.md>), [browser](<https://devfeed.tech/tags/browser.md>), [building](<https://devfeed.tech/tags/building.md>), [code](<https://devfeed.tech/tags/code.md>), [node](<https://devfeed.tech/tags/node.md>), [real-time](<https://devfeed.tech/tags/real-time.md>), [scalability](<https://devfeed.tech/tags/scalability.md>), [security](<https://devfeed.tech/tags/security.md>), [uncategorized](<https://devfeed.tech/tags/uncategorized.md>), [websocket](<https://devfeed.tech/tags/websocket.md>), [xss](<https://devfeed.tech/tags/xss.md>)

### AI overview

This tutorial explains how to build a real-time chat application with WebSockets and Socket.IO. It covers the two-way browser-server connection, a basic Node.js server that broadcasts chat messages, client-side message handling, and security considerations including input sanitization, authentication, authorization, and XSS prevention.

### Source excerpt

Have you ever wished your online chats felt more like actual conversations, without needing to constantly refresh the page for new messages? If so, WebSockets are the answer! WebSockets let you build real-time chat apps where messages flow instantly. Unlike regular websites, WebSockets keep a connection open between your app and the server. That means [...]

## 即刻多端实时通信实践

DevFeed: [即刻多端实时通信实践](<https://devfeed.tech/articles/article-41012.md>)

Original publisher: [Read original article](<https://blog.joway.io/posts/socket-io/>)

Author: Joway

Published: 2018-09-18T00:00:00Z

Content type: article

Language: zh

Sources: [Random Thoughts](<https://devfeed.tech/sources/random-thoughts.md>)

Topics: [Socket.IO](<https://devfeed.tech/topics/socket-io.md>), [WebSocket](<https://devfeed.tech/topics/websocket.md>), [Redis](<https://devfeed.tech/topics/redis.md>), [Load Balancing](<https://devfeed.tech/topics/load-balancing.md>), [Back end](<https://devfeed.tech/topics/backend.md>), [Publish-subscribe pattern](<https://devfeed.tech/topics/pubsub.md>)

Tags: [backend](<https://devfeed.tech/tags/backend.md>), [channel](<https://devfeed.tech/tags/channel.md>), [clients](<https://devfeed.tech/tags/clients.md>), [cluster](<https://devfeed.tech/tags/cluster.md>), [load-balancing](<https://devfeed.tech/tags/load-balancing.md>), [nodejs](<https://devfeed.tech/tags/nodejs.md>), [redis](<https://devfeed.tech/tags/redis.md>), [room](<https://devfeed.tech/tags/room.md>), [socket](<https://devfeed.tech/tags/socket.md>), [tech](<https://devfeed.tech/tags/tech.md>), [websocket](<https://devfeed.tech/tags/websocket.md>)

### AI overview

This Chinese technical article explains how Jike's jike-io real-time communication infrastructure is built with socket.io. It describes server-to-client WebSocket notifications, per-user rooms, HTTP requests for business operations, socket.io's fallback and reconnection behavior, and Redis-based distribution across nodes, including sticky load balancing and the associated message-broadcast overhead. It also discusses connection spikes and Node.js bottlenecks.

### Source excerpt

背景 jike-io 是即刻基于 socket.io 构建的一个实时通信基础设施。目前客户端上的所有实时通信服务都是建立在其基础上，涵盖了私信、消息通知、用户反馈、活动页小游戏等诸多组件。 在目前即刻的实时通信设计里，我们的实时通信只是为了让服务端主动推送消息给客户端，客户端不会主动通过 websocket 发送消息。由于几乎我们所有需要发送消息的请求都会有一定业务逻辑在，而这个业务逻辑我们并不希望 websocket 连接层(jike-io)去处理，所以我们仍旧采用传统 HTTP 请求的方式去发送请求。至于之后是否需要推送消息给用户，由服务端调用 jike-io 的接口进行实现。

## How we scaled Wisembly's infrastructure : moving from our Elephant to RabbitMQ

DevFeed: [How we scaled Wisembly's infrastructure : moving from our Elephant to RabbitMQ](<https://devfeed.tech/articles/how-we-scaled-wisembly-s-infrastructure-moving-from-our-elephant-to-rabbitmq-34698.md>)

Original publisher: [Read original article](<https://medium.com/unexpected-token/how-we-scaled-wisembly-s-infrastructure-moving-from-our-elephant-to-rabbitmq-282e1fba68ed?source=rss----2d2624499d2---4>)

Author: Guillaume POTIER

Published: 2015-07-02T13:31:56Z

Content type: article

Language: en

Sources: [eFounders](<https://devfeed.tech/sources/efounders.md>)

Topics: [RabbitMQ](<https://devfeed.tech/topics/rabbitmq.md>), [Socket.IO](<https://devfeed.tech/topics/socket-io.md>), [WebSocket](<https://devfeed.tech/topics/websocket.md>), [real-time](<https://devfeed.tech/topics/real-time.md>), [MySQL](<https://devfeed.tech/topics/mysql.md>), [Node.js](<https://devfeed.tech/topics/node-js.md>), [PHP](<https://devfeed.tech/topics/php.md>), [Redis](<https://devfeed.tech/topics/redis.md>), [Software as a service](<https://devfeed.tech/topics/saas.md>)

Tags: [backend](<https://devfeed.tech/tags/backend.md>), [growth](<https://devfeed.tech/tags/growth.md>), [mysql](<https://devfeed.tech/tags/mysql.md>), [node-js](<https://devfeed.tech/tags/node-js.md>), [php](<https://devfeed.tech/tags/php.md>), [rabbitmq](<https://devfeed.tech/tags/rabbitmq.md>), [real-time](<https://devfeed.tech/tags/real-time.md>), [redis](<https://devfeed.tech/tags/redis.md>), [saas](<https://devfeed.tech/tags/saas.md>), [startup](<https://devfeed.tech/tags/startup.md>), [tech](<https://devfeed.tech/tags/tech.md>), [websockets](<https://devfeed.tech/tags/websockets.md>)

### AI overview

This article describes how Wisembly evolved its infrastructure as usage grew. It focuses on using RabbitMQ on the backend to communicate between application components and servers, after earlier use of Node.js, Socket.IO, PHP, MySQL, Redis, and WebSockets.

### Source excerpt

Hi, I'm Guillaume, I am the CTO and co-founder of Wisembly, a SaaS solution facilitating interactions during your big meetings and events. We recently launched a beta of our new product: Solid to help you make your every-day-meetings more productive and actionable. This is the story of how we improved our performance by changing and adding elements to our stack over the time. I'll particularly focus on how using RabbitMQ on the backend to communicate between different stack and servers improved our life. Where we once were Here are the building blocks for our tech team's philosophy: start small, DRY (Don't Repeat Yourself) and YAGNI (You Ain't Gonna Need It). Back in 2012, when we implemented real-time websockets communications with Node.js and Socket.io, we had a pretty small stack: everything fullstack on Symfony2 with MySQL as single storage and some tiny parts of Backbone.js here and there to power up our application. One year later I presented these slides at the Symfony2 Live Paris 2013 explaining how we implemented Elephant in raw PHP to communicate from our Symfony2 backend with our distant socket.io push server. https://medium.com/media/dfdfc12635e346b3ceb1b2838fda5808/href As I said, our stack was pretty minimal at the time. We didn't feel the need to complexify it for the sake of the socket.io push server. So we looked at websockets and found a pretty way to implement them, connect and emit events with our Open Source library. It did the job, we open-sourced something cool (more than 500 stargazers now and still active!), on our way to live happily ever after :)... Or did we? Where we are now Quite recently, as the business was growing, more and more push events were sent every minute on the various customer meetings we handle daily. For example, we have a specific feature for very interactive seminars where more than 500 users can answer a live poll. Oftentimes, all the attendees submit their answers during the same 10-to-20-second time window, right after

## Managing stale JavaScript and CSS assets with Discourse's message\_bus

DevFeed: [Managing stale JavaScript and CSS assets with Discourse's message\_bus](<https://devfeed.tech/articles/vintage-javascript-begone-41334.md>)

Original publisher: [Read original article](<https://samsaffron.com/archive/2014/01/15/vintage-javascript-begone>)

Author: Sam Saffron

Published: 2014-01-15T02:55:14Z

Content type: article

Language: en

Sources: [Sam Saffron](<https://devfeed.tech/sources/sam-saffron.md>)

Topics: [JavaScript](<https://devfeed.tech/topics/javascript.md>), [realtime](<https://devfeed.tech/topics/realtime.md>), [Messaging](<https://devfeed.tech/topics/messaging.md>), [Rails](<https://devfeed.tech/topics/rails.md>), [Ruby](<https://devfeed.tech/topics/ruby.md>), [Socket.IO](<https://devfeed.tech/topics/socket-io.md>), [Angular](<https://devfeed.tech/topics/angular.md>), [Meteor](<https://devfeed.tech/topics/meteor.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [json](<https://devfeed.tech/tags/json.md>), [messages](<https://devfeed.tech/tags/messages.md>), [rails](<https://devfeed.tech/tags/rails.md>), [realtime](<https://devfeed.tech/tags/realtime.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [socket](<https://devfeed.tech/tags/socket.md>)

### AI overview

The article explains how Discourse addresses stale JavaScript and CSS bundles in single-page applications. It presents the message_bus gem as a mechanism for realtime updates, then describes using an application-version digest and client-side route transitions to refresh assets when versions change.

### Source excerpt

The Problem These days all the cool kids are using Ember.JS or Angular or Meteor or some other single page web application. If you deploy often, like we do at Discourse, you have a problem. How can you get everyone to run the latest version of your JavaScript and CSS bundle? Since people do not reload full pages and just navigate around accumulating small json payloads there is a strong possibility people can be on old versions and experience weird and wonderful odd bugs. The message bus One BIG criticism I have heard of Rails and Django lately is the lack of "realtime" support. This is an issue we foresaw over a year ago at Discourse. Traditionally, people add more components to a Rails system to support "realtime" based notifications. Be it Ruby built systems like faye, non Ruby systems like Node.JS with socket.io or outsourced systems like Pusher. For Discourse none of these were an option. We could not afford to complicate the setup process or outsource this stuff to a third party. I built the message_bus gem to provide us with an engine for realtime updates: github.com GitHub - discourse/message_bus: A reliable and robust messaging bus for Ruby and... A reliable and robust messaging bus for Ruby and Rack At the core of it message_bus allows you a very simple API to publish and subscribe to messages on the client: # in ruby MessageBus.publish('/my_channel', 'hello') <!-- client side --> <script src="message-bus.js" type="text/javascript"></script> <script> MessageBus.subscribe('/my_channel', function(data){ alert(data); }); </script> Behind this trivial API hides a fairly huge amount of feature goodness: This thing scales really well, clients "pull" information from a reliable pub sub channel, minimal per-client house keeping. Built in security (send messages to user or groups only) Built on rack hijack and thin async, so we support passenger, thin, unicorn and puma. Uses long polling, with an event machine event loop, can easily service thousands of clients fro

## The Robust Realtime Server

DevFeed: [The Robust Realtime Server](<https://devfeed.tech/articles/the-robust-realtime-server-19980.md>)

Original publisher: [Read original article](<http://engineering.hackerearth.com/2013/05/31/the-robust-realtime-server/>)

Published: 2013-05-31T00:00:00Z

Content type: article

Language: en

Sources: [HackerEarth](<https://devfeed.tech/sources/hackerearth.md>)

Topics: [Server](<https://devfeed.tech/topics/server.md>), [Socket.IO](<https://devfeed.tech/topics/socket-io.md>), [Meteor](<https://devfeed.tech/topics/meteor.md>), [Database](<https://devfeed.tech/topics/database.md>), [Web](<https://devfeed.tech/topics/web.md>), [Cache](<https://devfeed.tech/topics/cache.md>)

Tags: [blog-post](<https://devfeed.tech/tags/blog-post.md>), [browser](<https://devfeed.tech/tags/browser.md>), [cache](<https://devfeed.tech/tags/cache.md>), [code](<https://devfeed.tech/tags/code.md>), [communication](<https://devfeed.tech/tags/communication.md>), [database](<https://devfeed.tech/tags/database.md>), [message-queue](<https://devfeed.tech/tags/message-queue.md>), [server](<https://devfeed.tech/tags/server.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

This developer article describes a realtime server that updates webpages when database or cache data changes. It discusses scaling problems with nowjs and socket.io, including connection limits and file descriptor leaks, then explains choosing Tornado as an alternative. The described code-submission workflow uses a web server, RabbitMQ message queues, a code-checker engine, asynchronous processing, and browser notifications.

### Source excerpt

This is going to be a long blog post but I promise you will find some interesting piece of engineering here, so stay till the end. The realtime server manages the live update of webpages when the data changes in the data storage system (database or cache). We had a realtime server in-place but there was a big problem with scaling it. ####Problem with nowjs I was told beforehand that I will be primarily working first on writing a realtime server beside many other things. Vivek Prakash told me he had written a realtime server implementation sometime ago with nowjs. But the problem with it is that it doesn't scale well beyond ~200 simultaneous connections. In a conversation on Google Groups, I came across this: In my experience, the underlying "socket.io" module is not able to scale well (more than 150 connections was a problem for me), so I had to retreat from using "nowjs" or more specifically, "socket.io" in one of my applications. After further inspection, we also saw that there was an issue with file descriptor leak and nowjs server reported ENFILE/EMFILE (Too many open files). Also nowjs project was abandoned in 2012 and last commit in github repo is that of 1 year ago. So there was need of some good alternative which can handle large number of simultaneous connections (or users). I didn't have to do much research as Vivek had already researched about it. He found Tornado and Meteor.js to be good alternative. Going by order of preference and popularity I chose Tornado, and also because it's integration with existing system looked simpler and more efficient. ####The Use Case Vivek pretty much explained me how different components of code submission works. Here is a quick explanation of it. User submits the code and a POST request is sent to webserver which further sends submission details to a message queue in RabbitMQ server (a message broker to connect various application components). Code-checker engine (consumer of RabbitMQ here) gets the submission details, e

## Proxy socket.io and nginx on the same port, over SSL

DevFeed: [Proxy socket.io and nginx on the same port, over SSL](<https://devfeed.tech/articles/proxy-socket-io-and-nginx-on-the-same-port-over-ssl-35445.md>)

Original publisher: [Read original article](<https://darkcoding.net/software/proxy-socket-io-and-nginx-on-the-same-port-over-ssl/>)

Author: Graham King

Published: 2011-12-22T22:32:26Z

Content type: tutorial

Language: en

Sources: [Graham King](<https://devfeed.tech/sources/graham-king.md>)

Topics: [Socket.IO](<https://devfeed.tech/topics/socket-io.md>), [nginx](<https://devfeed.tech/topics/nginx.md>), [proxy](<https://devfeed.tech/topics/proxy.md>), [SSL](<https://devfeed.tech/topics/ssl.md>), [realtime](<https://devfeed.tech/topics/realtime.md>), [Web](<https://devfeed.tech/topics/web.md>), [Django](<https://devfeed.tech/topics/django.md>), [backends](<https://devfeed.tech/topics/backends.md>)

Tags: [django](<https://devfeed.tech/tags/django.md>), [haproxy](<https://devfeed.tech/tags/haproxy.md>), [http](<https://devfeed.tech/tags/http.md>), [nginx](<https://devfeed.tech/tags/nginx.md>), [proxy](<https://devfeed.tech/tags/proxy.md>), [realtime](<https://devfeed.tech/tags/realtime.md>), [server](<https://devfeed.tech/tags/server.md>), [socket](<https://devfeed.tech/tags/socket.md>), [software](<https://devfeed.tech/tags/software.md>), [ssl](<https://devfeed.tech/tags/ssl.md>)

### AI overview

A tutorial for running Socket.IO realtime traffic and a Django web application on the same SSL port. It uses stunnel to terminate SSL, HAProxy to route WebSocket traffic to Node.js and web traffic to nginx, and nginx with Gunicorn to serve the Django application.

### Source excerpt

Streamline your SSL setup: Realtime and web on one port.