Jump to content
php.lv forumi

Maksimāli ātra realtime tehnoloģija


qwerty

Recommended Posts

  • Replies 51
  • Created
  • Last Reply

Top Posters In This Topic

Felony, jūs ar jurčiku radinieki? Tu ar kā tāda maza meitene čīksti par to, ko raksta citi. Nu ja tev nepatīk, nelasi, ignorē, ej pameditē, nebojā sev nervus.

 

P.S. Starp citu pats pirms kāda laika visur līdi ar savu falcon php.

P.P.S. Hadoop ir krietni vecāks un nu jau kādu laiku par daudz labāku alternatīvu tiek uzskatīts Spark. Ai kāda sakritība, Spark ir rakstīts Scalā.

 

 

Edit: Scala/Play sintakse tajos piemēros kļūst increasingly less readable, kamēr socket.io paliek tikpat loģiski saprotama. Ja arī Scala/Play sintakse ir "spēcīgāka", man vienalga, ja kods izskatās tik neloģisks.

 

Tas visdrīzāk tāpēc, ka tu ar javascriptu esi darbojies daudz, bet ar skalu nē. Man abi ir vienlīdz lasāmi. Scalas piemērs pat ir nedaudz deklaratīvāks, jo gan validate, gan format metodes tiek pielietotas vienādā formā (kā Enumeratee). Uz lielāku koda bāzi tas noteikti padara kodu vieglāk lasāmu.

Edited by codez
Link to comment
Share on other sites

Nemaz tik daudz neesmu darbojies. Fakts kā tāds, Play sintakse ir ievērojami sarežģītāka (nevis garāka, bet tieši sarežģītāka) un, manuprāt, vietumis galīgi nesaprotama, un es 100% neesmu vienīgais, kurš tā domā. Savukārt socket.io sintakse ir saprotama pat iesācējam. Ja gribās, lai tavā valodā programmē tikai elitisti, tad, protams, tā ir priekšrocība, bet es neesmu no tiem cilvēkiem.

 

P.S. Ignorēšana nav risinājums. Problēma NAV mūsu galā. Varbūt atceries, kāds ir šī foruma domēns?

Link to comment
Share on other sites

P.S. Starp citu pats pirms kāda laika visur līdi ar savu falcon php.

P.P.S. Hadoop ir krietni vecāks un nu jau kādu laiku par daudz labāku alternatīvu tiek uzskatīts Spark. Ai kāda sakritība, Spark ir rakstīts Scalā.

P.S Katrā topikā?!

P.P.S Spark un Hadoop ir instrumenti, kas viens otru papildina, ne aizstāj. Also HAIl un LIAH. 

Link to comment
Share on other sites

Nemaz tik daudz neesmu darbojies.

Es šeit runāju nevis tikai par pliku socket.io, bet par javascript sintaksi un valodas konstrukcijām, kuras tev ir daudz pierastākas.

 

Fakts kā tāds, Play sintakse ir ievērojami sarežģītāka (nevis garāka, bet tieši sarežģītāka) un, manuprāt, vietumis galīgi nesaprotama, un es 100% neesmu vienīgais, kurš tā domā. Savukārt socket.io sintakse ir saprotama pat iesācējam.

Šajā gadījumā piekrītu, ka socket.io API ir vienkāršāks kā Play API, bet tas ir tāpēc, ka socket.io api ir ļoti specializēts un primitivizēts. 

Piemēram, ja tev lapā ir kūkiju bāzēta autentifikācija, tad socket.io gadījumā konkrētajā piemērā nav iespējams veikt konkrētās darbības autorizāciju, kamēr Play piemērā kontroliera actionā ir redzams request parametrs, no kura var piekļūt konkrētā requesta parametriem un veikt autentifikāciju un autorizāciju.

Tāpat socket.io API strādā ar pilniem datu fragmentiem, kas, piemēram, neļauj ierobežot plūsmu datu apjoma limitu konkrētām konekcijām, vai invalidēt konkrētu konekciju pie daļēju datu saņemšanas.

Un vēl daudz lietu, ko play API ļauj paveikt, bet ar socket.io api nav iespējams izdarīt.

Piemēram, šijā topikā bija prasība sūtīt bildes starp lietotājiem. Ar play api ir iespējams sākt sūtīt bildi saņēmējam vēl kamēr tā pilnībā nav atsūtīta no sūtītāja, kamēr socket.io api var sākt sūtīt bildi tikai tad, kad to pilnībā saņēmis serveris. Tādā veidā Play api ļauj divreiz ātrāku bilžu sūtīšanu starp klientiem, ja bottlenecks ir klientu tīkls.

Un, ja Skalā uzrakstītu kaut ko līdzīgu vienkāršotajam socket.io API, tad šis piemērs izskatītos aptuveni šādi:

object Socket extends Controller {
  def isValidMessage(msg:String) = !msg.trim.isEmpty
  def formatMessage(msg:String) = "[echo]"+msg
  def connect = SimplifiedWebsocketAction { socket =>
    Logger.info("Someone just connected!")
    socket.on("message", { msg =>
      Logger.info("Got message: " + msg)
      if (isValidMessage(msg)) socket.emit(formatMessage(msg))         
    })
  }
}

P.S.

Skalas gadījumā gan izmantojot partial funkcijas un case class patern mačingu varētu api vienkāršot vēl un panākt šādu rezultātu:

Teiksim SimplifiedWebsocketAction par parametru jāpadod partial funkcija, kura apstrādā dažādus socketa eventus, no kuriem viens ir Message, taču līdz ar šo eventu tiek padots arī sockets

def connect = SimplifiedWebsocketAction {
  case Message(msg, socket) if isValidMessage(msg) => socket.emit(formatMessage(msg))
}

Vai vēl vienkāršojot varam tikt vaļā no socket referneces, ja api paredz, ka Message eventa gadījumā funkcija atgriezīs atbildi:

def connect = SimplifiedWebsocketAction {
  case Message(msg) if isValidMessage(msg) => formatMessage(msg)
}

Teiksim ar vairākiem eventiem, api izmantošana izskatītos šādi

def connect = SimplifiedWebsocketAction {
  case Connect => Logger.info("user connected")
  case Message(msg) if isValidMessage(msg) => formatMessage(msg)
  case Message(msg) => "Invalid message"
  case Disconnect => Logger.info("user disconnected")
}

Pamēģini uzrakstīt tik skaisti izmantojamu api javascriptā.

Izmantojot Play Action composition SimplifiedWebsocketAction Scalā būtu extendots Play WebSocket handleris ar kādām 10-20 rindiņām koda un dažas vienrindu case class vajadzīgajiem eventiem.

Edited by codez
Link to comment
Share on other sites

Eh, lol. Šitās performances diskusijas ir so 2010, Who cares? Par performances problēmām domās tad, kad viņas būs, ja mēs ņemam konkrēto topicu, tad 30 cilvēku gadījumā performances starpība būs +/- nekāda starp dažādām valodām, viņš to softu var rakstīt pilnīgi jebkur pa lielam, drīzāk jādomā par tīkla performanci utt.

 

Vienkārši ir jāņem valoda, kas pašam ir vispazīstamākā, kas vislabāk montainosies tuvākā nākotnē pašam - tajā arī rakstīt - JS, Scala, Java, C, whatever.

 

Manuprāt līst tagad C vai citā nezināmā pasaulē, bez solid bāzes un rakstīt tur, "jo tā ir kompilēta valoda, tur viss būs labāk" ir vienkārši bezjēdzīgi un ilgtermiņā neatmaksāsies.

Link to comment
Share on other sites

Šie divi jēdzieni nav tā kā pretrunā viens ar otru?

Specializēts ir pretstats universāls un nozīmē, ka dara kādu konkrētu uzdevumu. socket.io tika specializēts, lai varētu radīt primitīvāku api, kamēr play websockets api ir universālāks, tāpēc sarežģītāks.

 

@codez - nu tas jau izskatās daudz jaukāk, vienīgi šajā fragmentā:

  case Message(msg) if isValidMessage(msg) => formatMessage(msg)
  case Message(msg) => "Invalid message"

Prasās if/else, duplicate case ir nesmuki.

 

Šijā vienkāršajā gadījumā jā - pliks if/else ir nedaudz uzskatāmāks, bet attīstot to tālāk case variants paliek uzskatāmāks :

  case JsonMessage(msg) => doSomeStuffWithJson(msg)
  case Message(msg) if isMessageA(msg) => doSomeStuffA(msg)
  case Message(msg) if isMessageB(msg) => doSomeStuffB(msg)
  case Message(msg) => "Invalid message"
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...