A WebSockets megvalósítása a Rails 4-ben

A WebSockets az ActionCable segítségével valósítható meg a Rails5-ben. Sok funkció engedélyezésére használható, például csevegésekre, értesítésekre és más valós idejű modulokra. De hogyan lehet elérni ugyanazt a célt az ActionCable és a Rails 5 nélkül? Ez a blog azzal foglalkozik, hogy miként valósíthatjuk meg a WebSocketeket a Rails 4-ben.

Mielőtt elkezdenénk, nézzük át gyorsan a WebSockets fogalmát.

Mik azok a WebSocketek és hogyan működnek?

A web nagy része HTTP kéréseken / válaszokon alapul. Számos gazdagép és kliens kommunikációját teszik lehetővé TCP / IP transzporton keresztül. Ez azt jelenti, hogy a webalkalmazások általában nem tesznek semmit, miután a felhasználó meglátogatja őket egy böngészőben, elemzi a kérést és választ küld. Amíg a felhasználó nem kattint valamire az oldalon, a szerver nem kap új HTTP-kérést. Ezért tétlen lesz.

Vannak olyan technológiák, amelyek lehetővé teszik a kiszolgáló számára a kommunikáció megkezdését az ügyféllel, amikor adatok küldésre várnak. Ilyen például a „Push” vagy a „Comet”. Van egy hosszú lekérdezési technika, amely a HTTP-kapcsolatot nyitva tartja, amint az ügyfél csatlakozik a szerverhez. Ezekkel a megközelítésekkel rossz a HTTP általános költsége. Alacsony késleltetésű alkalmazásokhoz nem túl jó.

Itt jönnek a képbe a WebSockets. Olyan API-k, amelyek állandó „socket” kapcsolatot biztosítanak a szerver és az ügyfél között. Ez lehetővé teszi, hogy a szerver és az ügyfél is bármikor küldhessen adatokat.

Ebben a blogban létrehozunk egy online krikettjátékos aukciós webhelyet, amely a Rails 4 webaljzatait használja. Az oldalt több felhasználó is felhasználhatja ugyanazon lejátszóra licitálni. A kihívás az ajánlat frissítése az oldal újratöltése és az élő kommunikáció fenntartása nélkül.

Elkezdeni

A webaljzat funkcióinak megvalósításához főleg három drágakövet használnak:

Gemfile

gem ‘faye’gem ‘thin’, require: falsegem ‘render_sync’

A vékony egy kicsi és gyors rubin szerver. Faye-vel kell telepíteni, mivel a faye gem nem működik olyan szerverekkel, mint a webrick.

A következő fontos gyöngyszem a faye . A Faye eszközkészlet az egyszerű közzététel és előfizetés közötti webes ügyfelek közötti üzenetküldéshez. Könnyen használható üzenetirányító szerverekkel szállítja a Node.js és a Rack alkalmazásokat, valamint a kiszolgálón és a böngészőben használható ügyfelekkel.

A sync vagy render_sync gem valós idejű részek létrehozására szolgál a Rails segítségével. A Szinkronizálás lehetővé teszi olyan részek renderelését azoknál a modelleknél, amelyek minimális kóddal valós időben frissülnek a böngészőben, amikor a szerveren változás történik.

Célunk, hogy olyan funkcióval rendelkezzünk, amely lehetővé teszi az ajánlati értékek megjelenítését a felhasználó show oldalán. Ennek megvalósításának első lépése a sablonok telepítése a szinkron gemből.

a sínek szinkronizálást generálnak: install

És szinkronizálást igényel az eszközcsatornánkban.

app / assets / javascripts / application.js

//= require jquery//= require jquery_ujs//= require turbolinks//= require sync//= require_tree

A konfigurációs parancsfájl az alkalmazás elrendezésében szükséges

app / views / layouts / application.html.erb

Létre kell hoznunk egy részleges részt, és a / sync / könyvtárban kell tárolnunk _bid_log_row.html.erb néven.

Ez a rész tartalmazza a felhasználó ajánlatának értékét. Így fog kinézni:

Current Bid: 

És ennek megjelenítéséhez a show oldalon adja hozzá a következő sorokat a felhasználók show oldalán:

app / views / users / show.html.erb

Végül végezze el a BidLogsController módosításait, hogy tudja, hogyan kell kezelni a távoli űrlapbeküldéseket. Szinkronizálja az új ajánlatokat is.

class BidLogsController < ApplicationControllerrespond_to :html, :js
 def index @bid_logs = BidLog.all @new_bid = current_user.bid_logs.build end
 def create @bid_log = current_user.bid_logs.build(bid_log_params) if @bid_log.save sync_new @bid_log end respond_to do |format| format.html { redirect_to user_path(@bid_log.player_id) } format.json { head :no_content } end end
private
 def bid_log_params params.require(:bid_log).permit(:amount, :player_id) end
end

Konfiguráció

Most elkészült az alapvető kódolási rész. A következő lépés a Faye konfigurálása. Faye-nek külön webkiszolgálón kell futtatnia magát a webalkalmazást. Ennek megvalósításához létre kell hoznia egy Rackup konfigurációs fájlt. Adjon hozzá egy faye.ru fájlt a projekt gyökérzetéhez, és győződjön meg róla, hogy a következőképpen néz ki:

require ‘faye’
bayeux = Faye::RackAdapter.new(:mount => ‘/faye’, :timeout => 25)
bayeux.listen(9292)

Ez a fájl egyszerűen megmondja a Rackup-nak, hogyan kell elindítani a Faye szervert. Próbálja ki, hogy megbizonyosodjon a megfelelő működéséről. Futtassa ezt a terminálján:

rackup faye.ru -E termelés -s vékony

Csomagolás

Most már jók vagyunk. Az alkalmazás a Rails szerver indításával futtatható. A bloghoz társított kód itt található.