Jump to content
php.lv forumi

Recommended Posts

  • Replies 51
  • Created
  • Last Reply

Top Posters In This Topic

Posted (edited)

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
Posted

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?

Posted

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. 

Posted

Mani arī netraucē, ka kāds pastāsta par kādu citu tehnoloģiju un salīdzina to ar esošajām.

Posted (edited)

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
Posted

socket.io var dabūt http request'u un līdz ar to arī cookies ir pieejami

 

ja gribas izmantot raw websocket'us ar stream'ingu bez ping'iem, upgrade'iem/downgrade'iem un citām socket.io/engine.io fīčām, tad node.js var var izmanot ws package'u

Posted

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.

Posted

@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.

Posted

Š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"
Posted

Acīmredzot tas ir subjektīvi, man tomēr labāk patiktu if/else. Tehniski zem apsega šeit ir uztaisīts kaut kas ļoti līdzīgs switch/case fall-through – ja IFs izpildās - break, ja nē - fall-through uz nākamo, tikai vēl lieka datu tipa pārbaude nāk klāt.

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...