2011-12-20 33 views
5

Tôi có một số câu hỏi liên quan đến việc sử dụng socket IO với PHP và như vậy, tôi mới vào nodejs/socket io vì vậy tôi biết rất ít, tôi mới bắt đầu sử dụng nó trong vài ngày qua và tôi đang đi đến điểm Tôi sẽ thực hiện điều này trên trang web của mình (hiện tại tôi đã xây dựng các ví dụ thử nghiệm nhỏ).Node.js + Ổ cắm IO + Apache + PHP xóa cổng khỏi url?

Câu hỏi: Hiện tại tôi phải thêm cổng vào máy chủ cục bộ của mình để xem nó và hoạt động, rõ ràng là tôi không thể làm điều này khi đó là trang web trực tiếp và tôi cũng không thể làm điều này khi tôi sử dụng Các trang php (chỉ cần làm ví dụ với html) Nếu tôi đang sử dụng cổng 4000 cho máy chủ io socket của tôi, tôi phải truy cập: localhost: 4000, tuy nhiên tôi cần có thể truy cập: localhost: 8888/mysitefolder (8888 là cổng cho MAMP của tôi, cho php và mọi thứ) Tôi đã thấy trong các câu hỏi mà mọi người đã giải quyết vấn đề này nhưng tôi đã không thể làm cho nó hoạt động cho bản thân của tôi.

Đây là mã của tôi:

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

Ý của bạn là gì 'Tôi cần có thể truy cập: localhost: 8888/mysitefolder'? Tất cả những gì bạn cần làm là để tham khảo các tập tin js chính xác như: "localhost: 4000/socket.io/socket.io.js" và đó là nó. Bạn thậm chí không cần một máy chủ Express, bạn có thể phục vụ tệp chỉ mục với mã JS. – alessioalex

+0

Vâng localhost: 8888 là nơi MAMP chạy trên, cho php và tất cả mọi thứ, mysitefolder chỉ là thư mục bên trong có cho các tập tin php để làm việc. cũng vậy, tôi phải thay đổi gì trong hai tệp của mình? Tôi nhanh chóng thử và có lỗi. (Giống như tôi đã nói, im mới với điều này, vì vậy im không chắc chắn làm thế nào tất cả mọi thứ hoạt động) –

+0

nevermind, tôi đã nhận nó làm việc. Cảm ơn. –

Trả lời

3

Tôi nghĩ rằng bạn có nghĩa là bạn không muốn cứng mã một cảng hoặc url trong khách hàng? Có đúng không?

Trong socket.io 0.8.7, bạn không cần phải cung cấp. Bạn chỉ có thể sử dụng thông tin sau và nó sẽ được tự động phát hiện

var socket = io.connect(); 
+0

Điều đó không hiệu quả đối với tôi. –

+0

Hi Dylan, tôi có nhận được yêu cầu của bạn ngay sau đó không? Tôi có một socket.io làm việc bằng cách sử dụng emit nơi tôi không cung cấp URL và cổng. Tôi chỉ cung cấp cổng trên máy chủ không phải là máy khách -

+0

Đó không phải vấn đề ban đầu của tôi, vấn đề ban đầu của tôi là tôi nghĩ bạn phải có cổng trong chính URL, trong thanh. Tôi không biết lý do duy nhất mà nó không làm việc mà không có nó là bởi vì nó tham chiếu kịch bản socket.io. Giải pháp đã thay đổi: tới:

Các vấn đề liên quan