Node.js + Socket.IO a posílání zpráv z jiné aplikace

Re:Node.js + Socket.IO a posílání zpráv z jiné aplikace
« Odpověď #15 kdy: 15. 05. 2017, 10:42:57 »
Je tady poté i další aspekt, pokud uživatelské jméno je vstupem z venku a já ho dávám jako klíč do objektu, mohu si s tím zadělat na problém, kdy správně zvolená jména mi odrovnají aplikaci kvůli složitosti jejich hledání v hashmapě.

to je blbost. Složitost vyhledávání v hashmapě nemůže být horší než vyhledávání v poli, i kdyby útočník měl možnost vytvořit jména všech uživatelů.

Coz je potencialne dost na problem...


gll

Re:Node.js + Socket.IO a posílání zpráv z jiné aplikace
« Odpověď #16 kdy: 15. 05. 2017, 11:05:40 »
Coz je potencialne dost na problem...

existuje příklad podobného útoku? Ani jsem nikde nenašel příklad konfliktních klíčů. Když vám útočník vytvoří tisíce podvodných účtů, tak budete mít problém i při ukládání do pole.

ntpt

Re:Node.js + Socket.IO a posílání zpráv z jiné aplikace
« Odpověď #17 kdy: 16. 05. 2017, 16:51:29 »
Děkuji všem za odpovědi.  Ještě by mě ovšem zajímala jedna věc. Reentrantnost , součastný běh či serializovatenost callbacků.

z  přikladu:

  socket.on('chat message', function(msg){
  UDELEJ NECO CO TRVÁ DLOUHO
};

co  se stane, když  callback ještě běží... a dojde další "chat message" ? běží paralerně ?  čeká se na dokončení toho prvního ? Nebo co vlastně ?

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Node.js + Socket.IO a posílání zpráv z jiné aplikace
« Odpověď #18 kdy: 16. 05. 2017, 17:29:00 »
Děkuji všem za odpovědi.  Ještě by mě ovšem zajímala jedna věc. Reentrantnost , součastný běh či serializovatenost callbacků.

z  přikladu:

  socket.on('chat message', function(msg){
  UDELEJ NECO CO TRVÁ DLOUHO
};

co  se stane, když  callback ještě běží... a dojde další "chat message" ? běží paralerně ?  čeká se na dokončení toho prvního ? Nebo co vlastně ?
V JS se tupě multiplexuje na jedno vlákno, takže typicky se čeká (blokuje), než callback doběhne. Když něco trvá dlouho, tak by se měl použít další callback, aby se ty kusy kódu proložily.

čumil

Re:Node.js + Socket.IO a posílání zpráv z jiné aplikace
« Odpověď #19 kdy: 16. 05. 2017, 19:24:22 »
Ty nejsi node zacatecnik, ty si dev zacatecnik, mazej si koupit knihu a neprud na foru. Vsude se dozvis ze js je single thread async jazyk, tak proboha proc se tady ptas jestli muzou bezet callbacky paralelne...

A taky prosim nepouzivej novotvary jako treba matrjoska, jediny co tim druhymu cloveku reknes je to ze si mozna rusak.


ntpt

Re:Node.js + Socket.IO a posílání zpráv z jiné aplikace
« Odpověď #20 kdy: 17. 05. 2017, 09:04:29 »
Ty nejsi node zacatecnik, ty si dev zacatecnik, mazej si koupit knihu a neprud na foru. Vsude se dozvis ze js je single thread async jazyk, tak proboha proc se tady ptas jestli muzou bezet callbacky paralelne...

A taky prosim nepouzivej novotvary jako treba matrjoska, jediny co tim druhymu cloveku reknes je to ze si mozna rusak.

Učený z nebe nespadl. Ale pitomce jako by shazovali. Jak  je vidět na vašem případě.

gll

Re:Node.js + Socket.IO a posílání zpráv z jiné aplikace
« Odpověď #21 kdy: 17. 05. 2017, 09:45:13 »
Děkuji všem za odpovědi.  Ještě by mě ovšem zajímala jedna věc. Reentrantnost , součastný běh či serializovatenost callbacků.

z  přikladu:

  socket.on('chat message', function(msg){
  UDELEJ NECO CO TRVÁ DLOUHO
};

co  se stane, když  callback ještě běží... a dojde další "chat message" ? běží paralerně ?  čeká se na dokončení toho prvního ? Nebo co vlastně ?

Neběží paralelně. Proto můžeš bez obav použít ten slovník spojení. Čumil má pravdu, udělal bys lépe, kdyby sis nejdřív prošel nějaký tutorial k javascriptu. Většina tutorialů k nodejs znalost javascriptu a souvisejícího názvosloví předpokládá.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Node.js + Socket.IO a posílání zpráv z jiné aplikace
« Odpověď #22 kdy: 17. 05. 2017, 11:12:15 »
V JS se tupě multiplexuje na jedno vlákno, takže typicky se čeká (blokuje), než callback doběhne. Když něco trvá dlouho, tak by se měl použít další callback, aby se ty kusy kódu proložily.
P.S. Vývojáři knihoven v JS by udělali dobře, kdyby začali používat korutiny (když už je novější JS má), aby ušetřili sobě i uživatelům těch knihoven spoustu problémů s callbacky.

ntpt

Re:Node.js + Socket.IO a posílání zpráv z jiné aplikace
« Odpověď #23 kdy: 17. 05. 2017, 11:22:52 »
Děkuji všem za odpovědi.  Ještě by mě ovšem zajímala jedna věc. Reentrantnost , součastný běh či serializovatenost callbacků.

z  přikladu:

  socket.on('chat message', function(msg){
  UDELEJ NECO CO TRVÁ DLOUHO
};

co  se stane, když  callback ještě běží... a dojde další "chat message" ? běží paralerně ?  čeká se na dokončení toho prvního ? Nebo co vlastně ?

Neběží paralelně. Proto můžeš bez obav použít ten slovník spojení. Čumil má pravdu, udělal bys lépe, kdyby sis nejdřív prošel nějaký tutorial k javascriptu. Většina tutorialů k nodejs znalost javascriptu a souvisejícího názvosloví předpokládá.

A víte, že mi  těch cca 20 příspěvků, kdy se zeptám na věci které mne zajímají,  dalo více než deset tutoriálů ? Máte pravdu, nejsem žádný javascriptový guru, zatím jsme si vystačil jen s událostmi v prohlížeči, víc jseM nepotřeboval. Teď potřebuju. Tak krom toho že "čtu tutorialy", tak se ptám.

Ptali jste se všichni velcí vývojáři, když jste v čemkoliv začínali,  a vsadím se že i vám  lidé kteří měli zkušenosti poradili i v tom, co museli vidět jako úplmné základy. Narážky typu kup si knihu a nepruď jsou značně offtopic.  A jestli je někdo pyšný a zakládá si na svých vědomostech a s toho důvodu, aby to druhý neměl moc snadné, se nechce podělit, snadná pomoc NEMUSÍ ODPOVÍDAT. 

gll

Re:Node.js + Socket.IO a posílání zpráv z jiné aplikace
« Odpověď #24 kdy: 17. 05. 2017, 12:18:09 »
A víte, že mi  těch cca 20 příspěvků, kdy se zeptám na věci které mne zajímají,  dalo více než deset tutoriálů ? Máte pravdu, nejsem žádný javascriptový guru, zatím jsme si vystačil jen s událostmi v prohlížeči, víc jseM nepotřeboval. Teď potřebuju. Tak krom toho že "čtu tutorialy", tak se ptám.

Ptali jste se všichni velcí vývojáři, když jste v čemkoliv začínali,  a vsadím se že i vám  lidé kteří měli zkušenosti poradili i v tom, co museli vidět jako úplmné základy. Narážky typu kup si knihu a nepruď jsou značně offtopic.  A jestli je někdo pyšný a zakládá si na svých vědomostech a s toho důvodu, aby to druhý neměl moc snadné, se nechce podělit, snadná pomoc NEMUSÍ ODPOVÍDAT.

Javascript v prohlížeči také nespouští nic souběžně. while(true){}; zablokuje stránku. V nodejs to funguje stejně.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop

Re:Node.js + Socket.IO a posílání zpráv z jiné aplikace
« Odpověď #25 kdy: 17. 05. 2017, 12:46:24 »
Citace
A víte, že mi  těch cca 20 příspěvků, kdy se zeptám na věci které mne zajímají,  dalo více než deset tutoriálů ?

Přesně tak, zeptat se na základy není ostuda. A odpovídající nemusí dávat najevo svou nadřazenost - pokud někoho dotazy na základy obtěžují, tak přece nemusí odpovídat.

Je sice pravda, že k osvojení základních pojmů a principů by mělo sloužit oficiální vzdělání, ale jak víme, praxe je často taková, že se člověk učí vše až za pochodu. Proto dobrých zdrojů, které to vzdělání kvalitně doplní, není nikdy dost.

gll

Re:Node.js + Socket.IO a posílání zpráv z jiné aplikace
« Odpověď #26 kdy: 17. 05. 2017, 13:03:18 »
Přesně tak, zeptat se na základy není ostuda. A odpovídající nemusí dávat najevo svou nadřazenost - pokud někoho dotazy na základy obtěžují, tak přece nemusí odpovídat.

Je sice pravda, že k osvojení základních pojmů a principů by mělo sloužit oficiální vzdělání, ale jak víme, praxe je často taková, že se člověk učí vše až za pochodu. Proto dobrých zdrojů, které to vzdělání kvalitně doplní, není nikdy dost.

Mně nevadí, když se někdo ptá. Rád se pokusím odpovědět. Z vlastní zkušenosti je rychlejší si projít začátečnické kapitoly a nepřeskakovat je.

Nejde o oficiální vzdělání. Javascript se do nedávna na školách nevyučoval. Node.js je nová technologie. Zboj je Phd., a Javascript také nezná.


zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Node.js + Socket.IO a posílání zpráv z jiné aplikace
« Odpověď #27 kdy: 17. 05. 2017, 13:06:57 »
Citace
A víte, že mi  těch cca 20 příspěvků, kdy se zeptám na věci které mne zajímají,  dalo více než deset tutoriálů ?

Přesně tak, zeptat se na základy není ostuda. A odpovídající nemusí dávat najevo svou nadřazenost - pokud někoho dotazy na základy obtěžují, tak přece nemusí odpovídat.

Je sice pravda, že k osvojení základních pojmů a principů by mělo sloužit oficiální vzdělání, ale jak víme, praxe je často taková, že se člověk učí vše až za pochodu. Proto dobrých zdrojů, které to vzdělání kvalitně doplní, není nikdy dost.
Tak od toho jsou fóra. Problém je, že na otázky odpovídají lidi, co o tom taky nic neví (a co hůř, myslí si opak). Node.js znám například skrznaskrz a v čemkoliv rád poradím, ale to, co tu občas člověk čte za bláboly, je k neuvěření. Chce-li se někdo něco dozvědět, měl by jít na stackoverflow.

gll

Re:Node.js + Socket.IO a posílání zpráv z jiné aplikace
« Odpověď #28 kdy: 17. 05. 2017, 13:20:25 »
Tak od toho jsou fóra. Problém je, že na otázky odpovídají lidi, co o tom taky nic neví (a co hůř, myslí si opak). Node.js znám například skrznaskrz a v čemkoliv rád poradím, ale to, co tu občas člověk čte za bláboly, je k neuvěření. Chce-li se někdo něco dozvědět, měl by jít na stackoverflow.

Nikdo ti nebrání odpovědět lépe.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Node.js + Socket.IO a posílání zpráv z jiné aplikace
« Odpověď #29 kdy: 18. 05. 2017, 11:17:44 »
Dobrý den.

Snažím se proniknout  do node.js a socket.io a z  některých věcí nejsem trochu moudrý. Vezměme jejich příklad s jednoduchou chat aplikací.Ten je celkem srozumitelný.

Ovšem jsem v koncích, když přemýšlím, jak  to propojit s externími aplikacemi.

Když už jsme u jejich  kódu chatovací aplikace:

Kód: [Vybrat]
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);


chápu že si pomocí require vytvořím express framework objekt, v jeho rámci objekt http serveru (a ten někam bindnu), v  rámci serveru si vytvořím  objekt io, reprezentující websocket, (víceméně matrjoška)  jakmile se na něj někdo připojí vznikne socket

A v jeho rámci  reaguji na události - socket.on("událost", function(blah){udělejněco})

Kód: [Vybrat]
io.on('connection', function(socket){
  socket.on('chat message', function(msg){
    io.emit('chat message', msg);
  });
});

Řekněme že se připojí  součastzně Franta a Pepa. Chápu, že jejich spojení a jejich websockety nepromíchají neb každé patří do jiné instance objektu socket z jejich příkladu. Řekněme, že si Franta i Pepa vymění nějaké autorizační zprávy ze serverem a tedy bude jasné kdo je na kterém socketu.

Problém začíná, když potřebuji přes takto navázané spojení  poslat klientovi data z  jiného běžícího programu.Řekněme, že něco běžícího na serveru dojde k názoru, že potřebuje poslat zprávu Pepovi.

Otázklou je JAK to propojit. Zkrátka čím a jak "vstoupit" dovnitř těch vnořených objektů (a do toho správného) a říci (vyvolat událost): ted pošli TYTO data.

Hloupého kopni.... Umí mi prosím někdo vyplnit toto bílé místo ? Děkuji.
Systémové řešení jen mít prostě API pro IPC a onen objekt registrovat. IPC pak bude běžet nezávisle a posílat data dle potřeby. Koncepčně čisté řešení jsou například kanály (CSP), i když zrovna v JS se CSP implementuje dost blbě.