chat

ruby
# app/channels/chat_channel.rb
class ChatChannel < ApplicationCable::Channel
  def subscribed
    # Subscribe to a specific room
    room = Room.find(params[:room_id])

ActionCable for real-time WebSocket communication

ruby rails actioncable
by Sarah Mitchell 3 tabs
erb
<%# Append is also broadcast from the model; this response scrolls the author's view %>
<%= turbo_stream.append "messages" do %>
  <%= render partial: "messages/message", locals: { message: @message } %>
<% end %>

<turbo-stream action="scroll_to" target="<%= dom_id(@message) %>" behavior="smooth" block="end">

Scroll into view after append using a custom Turbo Stream action

rails hotwire turbo
by codesnips 4 tabs
javascript
const { WebSocketServer } = require('ws');
const crypto = require('crypto');

const wss = new WebSocketServer({ port: 8080 });

function broadcast(payload, except) {

Reconnecting WebSocket Chat Client with a Broadcasting Node Server

websocket realtime reconnection
by codesnips 3 tabs
typescript
import { startOfDay, isToday, isYesterday, format } from 'date-fns';

export interface ChatMessage {
  id: string;
  senderId: string;
  senderName: string;

Group Chat Messages by Day with a Memoized Selector in React

react typescript selectors
by codesnips 3 tabs
ruby
class TypingPresence
  EXPIRE_AFTER = 6 # seconds

  def initialize(room, redis: Redis.current)
    @room = room
    @redis = redis

Broadcast Typing Indicators in Rails Chat with ActionCable and a Redis Presence Tracker

rails actioncable websockets
by codesnips 3 tabs
python
import asyncio
from collections import defaultdict

from fastapi import WebSocket

FastAPI WebSocket Connection Manager for Broadcasting to Room Subscribers

fastapi websockets asyncio
by codesnips 3 tabs
php
<?php

use App\Models\Conversation;
use App\Models\User;
use Illuminate\Support\Facades\Broadcast;

Broadcasting a Chat Message with Laravel Echo and Blade Components

laravel broadcasting websockets
by codesnips 4 tabs