2016-11-16 55 views
1


我是Node.js的新手,我試圖完成一個簡單的聊天應用程序。
但我卡住了。我試圖谷歌和使用其他解決方案,但我無法找到它的工作原因。如果有人能幫助我,那將會很棒。Socket.IO在本地工作,但不是externally

即將發生的錯誤是,它花了很長時間來回應。
這是我的代碼。

服務器端:

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 

//##### PUSH HTML FILE 
app.get('/', function(req, res){ 
    res.sendFile(__dirname +'/index.html'); 
}); 

//##### START SERVER 
http.listen(3000, '0.0.0.0', function(){ 
    console.log('started on port: 3000'); 
}); 

//##### USER CONNECTED 
io.on('connection', function(socket){ 
    console.log('A User Connected'); 

//##### LOG MESSAGE 
socket.on('chat message', function(msg){ 
    console.log(msg); 
    io.emit('chat message', msg); 
}); 

//##### LOG USERNAME 
socket.on('set username', function(username){ 
    console.log('NEW USER: ' + username + ' has been set!'); 
    io.emit('set username', username); 
}); 

//#####USER DISCONNECTED 
socket.on('disconnect', function(){ 
    console.log('A user disconnected'); 
    }); 
}); 

客戶端:

<script src="/socket.io/socket.io.js"></script> 
    <script src="http://code.jquery.com/jquery-1.11.1.js"></script> 
    <script> 
     var socket = io(); 

     //##### SET USERNAME 
     $('#set_username').submit(function(){ 
      socket.emit('set username', $('#username').val()); 
      return false; 
     }); 

     //##### SET MESSAGE 
     $('#sendmsg').submit(function(){ 
     var msg = '['+$('#username').val()+'] ' + $('#m').val(); 

      socket.emit('chat message', msg); 
      $('#m').val(''); 
      return false; 
     }); 

     //SET MESSAGE 
     socket.on('chat message', function(msg){ 
      $('#messages').append($('<li>').text(msg)); 
     }); 
    </script> 

提前感謝!

+0

你在哪裏指定服務器連接到客戶端? –

+0

你在NAT後面。 – Turrican

+0

在這裏黑暗中拍攝,我感覺服務器上的端口3000位於防火牆後面,或者像@Turrican所說的那樣,您可能需要在路由器上設置NAT。TCP/IP沒有任何區別在本地主機(127.0.0.1)之間,或任何其他IP。而且您在所有接口0.0.0.0上偵聽,所以這不是您的節點應用程序問題。 – Keith

回答

2

看看評論:

你正在監聽一個NAT後面的3000端口。如果您想從外部連接,則需要在路由器中將端口轉發配置到本地服務器。你的NAT規則中有一個錯字。

相關問題