• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

node.js i socket.io - pytania

Object Storage Arubacloud
0 głosów
827 wizyt
pytanie zadane 10 lipca 2016 w JavaScript przez Damian Makieła Nowicjusz (200 p.)

Witam

Jako że sockety obsługują porty zważając na to że to node.js.. zdecydowałem się ominąć to, nie dawać zawartości strony do index.html - zostawiłem go pustym plikiem, wszystko inne napisałem natomiast w osobnym pliku i lokacji na serwerze - w index.php, gdzie jako link do skryptu w head dałem localhost:3000 oraz w io() dałem localhost:3000 i działa! w pliku php mam podłączenie do socketów czyli do uruchomionego procesu pliku index.js.

I teraz tak, pierwsze pytanie, czy mogę jakoś te porty inaczej ustawić? jak to poprawnie skonfigurować / napisać.

W pliku php inicjuje io.emit i on łączy się z localhost:3000 ale zewnętrzne osoby wtedy nie są połączone do index.js bo zablokowałem port 3000 w NTP.. a zaś z kolei jeśli odblokuję i dam nie localhost tylko -> domena.pl:3000 to wtedy plik php co prawda wyśle emita io.emit do index.js no ale to wiąże się z tym że muszę w NTP odblokować port 3000 a tego robić nie chcę, bo już wynikowo będzie to zrobione u mnie na serverze tak że tylko port 80 będzie odblokowany no i może pare innych.

Więc jak to w socketach i node zrobić? żeby mój plik php łączył się do index.js po localhoście, inni widzieli to po zalogowaniu (w panelu) również. Ale na ogół na serwerze ten port ma być zablokowany.

 

Pytanie nr 2

 W socket.io emituję wystartowanie nowego procesu w javie, wtedy w index.js znajduje się on w:

 

io.on('connection', function(socket){
	socket.on('server start', function(msg){
		var spawn = require('child_process').spawn,
			minecraftServerProcess = spawn('java', [
		    '-Xmx512M',
		    '-Xms256M',
		    '-jar',
		    'engine.jar',
		    'nogui'
		]);
	});
});
// DRUGA POŁOWA
minecraftServerProcess.stdout.on('data', log);
minecraftServerProcess.stderr.on('data', log);

socket.on('chat message', function(msg){
	minecraftServerProcess.stdin.write(msg+'\n');
});

function log(data) {
	io.emit('chat message', data.toString());
}

 

Początkowo to co znajduje poniżej "// DRUGA POŁOWA"

było umieszczone w kodzie zaraz za kodem spawnowania nowego procesu gry w java.. i to działało tylko że po załadowaniu moja konsola w przeglądarce też działała i przyjmowała komendy, ale po odświeżeniu przeglądarki już niestety moje połączenie się utraciło - nie wie gdzie wysłać emita z pliku.php

Zupełnie na samym początku było to zrobione tak że tak część kodu zaczynająca się od ... 

var spawn = ... była nie od "taba" w io.connection tylko luźno, no to wtedy logiczne że po uruchomieniu samego procesu index.js w node serwer wystartował, niby ok.. ale i tak i tak potrzebuję zrobić takie coś na guziku że klikam w button i serwer zaczyna się startować..

 

W sumie to pytanie jak i sam temat na forum bardziej do osób które siedziały w node i socket, bo jak widzicie mam problem też w index.js i nie wiem jak to ugryźć, a jak dam "// DRUGA POŁOWA - kod poniżej tego napisu" zaraz za spawnowaniem procesu to zaś po odświeżeniu jak już wspominałem nie łączy mnie do tego.

Bo w node i socket to jest tak że jak odświeżam to łączy mnie do samego index.js, natomiast io.connection zadziała tylko raz bo to jest jednorazowa jakby transjisja która się potem ucina.. no a jak już wspominałem jak zostawię ten kod taki jakim jest (kod wyżej) to będzie działać zawsze.. ale wtedy

minecraftServerProcess.stdout.on('data', log);
minecraftServerProcess.stderr.on('data', log);

nie wie o jaki proces chodzi bo jest on zagnieżdżony w 

io.on('connection', function(socket){
	socket.on('server start', function(msg){

 

 

Tak więc czekam na pomoc:

1. porty w node i socket

2. problem z kodem

 

Pozdrawiam

2 odpowiedzi

+1 głos
odpowiedź 11 lipca 2016 przez Magicone Nałogowiec (45,100 p.)
Zacznij może prosto od tego, co w ogóle chcesz zrobić, bo na moje oko łapiesz się na coś, czego kompletnie nie rozumiesz. Same websockety pod node są obsługiwane przez TCP, ale używają też zapytań HTTP do tzw. pollingu. Sam port 3000 nie jest wymuszony, nie rozumiem dlaczego chcesz go blokować. Chcesz udostępnić połączenie po porcie równocześnie blokując go? :v Co do drugiego, to też ogólnie uruchamianie procesów to nie najlepszy nawyk, nie może się komunikować z procesem przez jakieś API?
0 głosów
odpowiedź 10 lipca 2016 przez Damian Makieła Nowicjusz (200 p.)

Niech nikt się nie dziwi że filmik, mamy przecież media.. 21 wiek i nowoczesny sposób komunikacji.

Aa z góry przepraszam za mikrofon, no i czekam na ostatnią rzecz.. czyli kwestia portów.

PS do administracji, gdybym mógł prosić o zmianę nazwy tematu na "node js i socket.io - zmiana portów do potrzeb"

http://makhart.esy.es/pinageison/2016-07-10_22-05-09.mp4

 

Pozdrawiam

komentarz 10 lipca 2016 przez ScriptyChris Mędrzec (190,190 p.)

PS do administracji, gdybym mógł prosić o zmianę nazwy tematu na "node js i socket.io - zmiana portów do potrzeb"

Zmiany nazwy tematu, jak i treści posta możesz dokonać sam - kliknij w "edytuj". 

1
komentarz 11 lipca 2016 przez writen Nałogowiec (29,060 p.)
  • Za dużo gadasz.
  • Po co dwa razy ustawiasz zdarzenie "connection"?
  • Z twoich wypowiedzi wynika, że nie bardzo rozumiesz czym są i jak działają sockety.
  • Dla swoich potrzeb powinieneś zrozumieć jak działają Websockets i jak działa protokół, na którym to się opiera (TCP). Bez tego dalej będziesz pieprzył takie farmazony jak na tym filmie.
  • Po co korzystasz jednocześnie z PHP i NodeJS? Nie mogłeś wybrać jednego z nich?
  • To co chcesz stworzyć, po prostu cię przerasta. Zacznij od nauki podstaw.
komentarz 11 lipca 2016 przez Damian Makieła Nowicjusz (200 p.)
W sumie się zgadza.. 2 connection? optymalizuję na końcu kod zawsze, uszczuplam.

Wiem jak działają sockety, jednak te porty muszę bardziej ogarnąć.

Wiem, biorę się "duże rzeczy" nie ogarniając podstaw, staram się je nadrabiać.

Ale z innej strony patrząc.. mam własny panel do gier : )

Podobne pytania

–3 głosów
1 odpowiedź 402 wizyt
pytanie zadane 10 lipca 2016 w JavaScript przez Damian Makieła Nowicjusz (200 p.)
0 głosów
2 odpowiedzi 959 wizyt
pytanie zadane 14 lipca 2016 w JavaScript przez Szymon Ciompała Mądrala (6,280 p.)
0 głosów
0 odpowiedzi 134 wizyt
pytanie zadane 6 października 2020 w JavaScript przez poldeeek Mądrala (5,980 p.)

92,555 zapytań

141,402 odpowiedzi

319,540 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...