Dường như có thể không phải là không thể. Tôi đã không thực hiện nó trước nhưng biết cách để làm nhưng một lần nữa tôi không biết tác động của Firewall trên cổng mở và đóng cửa. Ý tưởng cơ bản về việc làm là:
Yêu cầu bạn từ cổng 80 để thực hiện mọi việc và phản hồi yêu cầu đó sử dụng cổng khác để giao tiếp với khách hàng. Nó sẽ trở thành một đường hầm để nhận yêu cầu từ một cảng và nhận được trả lời từ cảng khác. Chỉ có một điều để được chăm sóc đúng cách mà chấm dứt kết nối càng sớm càng tốt một khi mục đích là giải quyết, trừ khi nó sẽ tạo ra bộ nhớ tải trên máy chủ.
Với ví dụ bên dưới, bạn có thể thực hiện những điều trên nhưng đề nghị bạn sử dụng chúng một cách thận trọng và sau khi kiểm tra thích hợp.
ref: Programming with Sockets through PHP
Ví dụ này hiển thị một máy chủ trò chuyện đơn giản. Thay đổi địa chỉ và các biến cổng cho phù hợp với thiết lập của bạn và thực hiện. Sau đó bạn có thể kết nối với máy chủ bằng một lệnh tương tự như: telnet 192.168.1.53 10000 (nơi địa chỉ và cổng khớp với thiết lập của bạn). Bất cứ điều gì bạn gõ sau đó sẽ được đầu ra ở phía máy chủ, và lặp lại cho bạn. Để ngắt kết nối, hãy nhập 'thoát'.
<?php
error_reporting(E_ALL);
echo "<h2>TCP/IP Connection</h2>\n";
/* Get the port for the WWW service. */
$service_port = getservbyname('www', 'tcp');
/* Get the IP address for the target host. */
$address = gethostbyname('www.example.com');
/* Create a TCP/IP socket. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "socket_create() failed: reason: " .
socket_strerror(socket_last_error()) . "\n";
} else {
echo "OK.\n";
}
echo "Attempting to connect to '$address' on port '$service_port'...";
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
echo "socket_connect() failed.\nReason: ($result) " .
socket_strerror(socket_last_error($socket)) . "\n";
} else {
echo "OK.\n";
}
$in = "HEAD/HTTP/1.1\r\n";
$in .= "Host: www.example.com\r\n";
$in .= "Connection: Close\r\n\r\n";
$out = '';
echo "Sending HTTP HEAD request...";
socket_write($socket, $in, strlen($in));
echo "OK.\n";
echo "Reading response:\n\n";
while ($out = socket_read($socket, 2048)) {
echo $out;
}
echo "Closing socket...";
socket_close($socket);
echo "OK.\n\n";
?>
Django không chạy một mình nó vẫn cần một máy chủ web (Apache?) Vấn đề với apache là nó ngắt kết nối nếu trang mất quá nhiều thời gian để "tải". Nếu tường lửa của bạn chặn các kết nối tới tất cả các cổng ngoại trừ các dịch vụ đang chạy (apache/ssh/...), tôi nghĩ bạn đã hết may mắn. Nếu các cổng khác mở, bạn có thể viết dịch vụ nhận yêu cầu, kết nối với máy chủ phát trực tuyến và phục vụ dữ liệu – Ramast