2011-12-20 7 views
5

Mam kilka pytań dotyczących używania gniazda IO z PHP i takie, jestem nowy dla nodejs/socket io, więc wiem bardzo mało, właśnie zacząłem używać go w ciągu ostatnich kilku dni i dochodzę do punktu, w którym Wdrażę to na mojej stronie internetowej (jak na razie właśnie budowałem małe przykłady testowe).Node.js + Socket IO + Apache + PHP usuwa port z adresu URL?

Pytanie: Obecnie muszę dodać port do mojego hosta lokalnego, aby go wyświetlić i działać, oczywiście nie mogę tego mieć, gdy jest to witryna internetowa na żywo, a także nie mogę tego zrobić, gdy używam php pages (po prostu robiłem przykłady z html) Jeśli używam portu 4000 dla mojego serwera gniazd io muszę iść do: localhost: 4000, jednak muszę być w stanie przejść do: localhost: 8888/mysitefolder (8888 jest portem dla mojego MAMP, dla php i wszystkiego) widziałem w pytaniach, gdzie ludzie rozwiązali to, ale nie byłem w stanie zmusić go do pracy dla siebie.

Oto mój kod:

chat.js

var app = require('express').createServer(), 
     io = require('socket.io').listen(app); 

app.listen(4000); 


var users = []; 

app.get('/', function (req, res) { 
res.sendfile(__dirname + '/index.html'); 
}); 

io.sockets.on('connection', function (socket) { 

socket.emit('connected'); 

socket.on('userID', function (userID) { 
users.push(userID); 
}); 


socket.on('message', function (message) { 
socket.broadcast.emit('message-response', { data: message}); 
}); 

}); 

index.html

<title>Testing</title> 
<script src="/socket.io/socket.io.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script> 

function mktime(){ 
    var newDate = new Date; 
    return newDate.getTime(); 
    } 

    function appendMessage(data) 
    { 
    $("body").append(data+"<br />"); 
    } 

    var socket = io.connect('http://localhost:4000'); 
    socket.on('connected', function() { 

    //select id from database in real environment 
    socket.emit("userID", mktime()); 

    }); 



    socket.on('message-response', function (message) { 

    appendMessage(message.data); 

}); 


    $(document).ready(function(){ 
     $('#input').keypress(function(event) { 
     if (event.keyCode != 13) return; 
      var msg = $("#input").val(); 

      if (msg) { 


     socket.emit('message', msg); 
     appendMessage(msg); 

     $("#input").val('').focus(); 
     } 
    }); 
    }); 



    </script> 

    <body> 
    <input type="text" id="input"><br> 
    </body> 
+0

Co masz na myśli przez „Muszę być w stanie przejść do: localhost: 8888/mysitefolder”? Wszystko, co musisz zrobić, to odwołać się do pliku js poprawnie jak: "localhost: 4000/socket.io/socket.io.js" i to wszystko. Nie potrzebujesz nawet serwera Express, możesz obsługiwać plik indeksu za pomocą kodu JS. – alessioalex

+0

Cóż localhost: 8888 jest tam, gdzie działa MAMP, dla php i wszystkiego, mysitefolder jest po prostu folderem, aby pliki php działały. także, co mogę zmienić w moich dwóch plikach? Po prostu szybko spróbowałem i wystąpił błąd. (Tak jak powiedziałem, jestem nowy z tym, więc nie jestem pewien jak wszystko działa) –

+0

nieważne, mam to działa. Dzięki. –

Odpowiedz

3

Chyba masz na myśli to, że nie chcą ciężko kodem port lub adres URL w Klient? Czy to prawda?

W pliku socket.io 0.8.7 nie trzeba go podawać. można po prostu użyć następujących, a zostanie ona automatycznie wykrywany

var socket = io.connect(); 
+0

To nie działa dla mnie. –

+0

Witam Dylan, czy otrzymałem wtedy twoją prośbę? Mam działający plik socket.io używający emitera, w którym nie podaję adresu URL i portu. Dostarczam tylko port po stronie serwera, a nie klienta -

+0

To nie był mój pierwszy numer, moim pierwszym problemem było to, że myślałem, że musisz mieć port w samym adresie URL na pasku. Nie wiedziałem, że jedynym powodem, dla którego nie działało bez niego, było odwołanie się do skryptu socket.io. Rozwiązanie uległo zmianie: na: