NodeJS – Socket.IO设置:提供静态内容无握手(Ubuntu在Rackspace云服务器上)

我已经在Rackspace上安装了带有Socket.IO的Ubuntu node.js

当我尝试一个简单的服务器应用程序,并尝试使用客户端请求时,我得到了“服务的静态内容”,而不是动摇。 在浏览器中debugging我可以看到“你好S …”,并在服务器端:

# node socket-server.js info - socket.io started debug - served static content /socket.io.js debug - served static content /socket.io.js 

我不知道从哪里开始寻找一个问题(同样的脚本在本地开发)

为什么node.js只提供静态内容而不握手?

iptables允许8866端口:#iptables -L

 Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ACCEPT tcp -- anywhere anywhere tcp dpt:www ACCEPT tcp -- anywhere anywhere tcp dpt:8866 DROP all -- anywhere anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- anywhere anywhere tcp dpt:8866 

这里是一个简单的服务器应用程序“socket-server.js”:

 // Require HTTP module (to start server) and Socket.IO var http = require('http'), io = require('socket.io'); // Start the server at port 8866 var server = http.createServer(function(req, res){ // Send HTML headers and message res.writeHead(200,{ 'Content-Type': 'text/html' }); res.end('<h1>Hello Socket Lover!</h1>'); }); server.listen(8866); // Create a Socket.IO instance, passing it our server var socket = io.listen(server); // Add a connect listener socket.on('connection', function(client){ // Create periodical which ends a message to the client every 5 seconds var interval = setInterval(function() { client.send('This is a message from the server! ' + new Date().getTime()); },5000); // Success! Now listen to messages to be received client.on('message',function(event){ console.log('Received message from client!',event); }); client.on('disconnect',function(){ clearInterval(interval); console.log('Server has disconnected'); }); }); 

这里是一个简单的客户端(SERVERDOMAIN被replace为真正的域):

 <!DOCTYPE html> <html> <head> <script src="http://SERVERDOMAIN:8866/socket.io/socket.io.js"></script> <script> // Create SocketIO instance var socket = io.connect('SERVERDOMAIN:8866'); // Add a connect listener socket.on('connect',function() { log('<span style="color:green;">Client has connected to the server!</span>'); }); // Add a connect listener socket.on('message',function(data) { log('Received a message from the server: ' + data); }); // Add a disconnect listener socket.on('disconnect',function() { log('<span style="color:red;">The client has disconnected!</span>'); }); // Sends a message to the server via sockets function sendMessageToServer(message) { socket.send(message); log('<span style="color:#888">Sending "' + message + '" to the server!</span>'); } // Outputs to console and list function log(message) { var li = document.createElement('li'); li.innerHTML = message; document.getElementById('message-list').appendChild(li); } </script> </head> <body> <p>Messages will appear below (and in the console).</p><br /> <ul id="message-list"></ul> <ul style="margin:20px 0 0 20px;"> <li>Type <code>socket.disconnect()</code> to disconnect</li> <li>Type <code>socket.connect()</code> to reconnect</li> <li>Type <code>sendMessageToServer('Your Message')</code> to send a message to the server</li> </ul> </body> </html> 

在你的客户端代码中试试这个

 var socket = io.connect('http://SERVERDOMAIN:8866'); 

这个问题主要与不正确的url有关。

我正在用一些Android(手机和平板电脑)设备以及wifi连接上的桌面浏览器来testing我的socket.io应用程序。 根据beNerd的回答,我改变了我的观点

 io.connect('http://localhost:3000'); 

 io.connect('http://192.168.5.3:3000'); // ip address of machine where the node.js app is running. 

它的工作。

希望这个答案有助于用户通过Wifi连接testing他们的NodeJS和Socket.IO应用程序。

我已经结束了全新的服务器安装,现在一切正常。

我已经使用了Ubuntu 12.04 LTS(Precise Pangolin),并使用socket.io安装node.js

对于客户端来说,我使用的是带有Flash文件的socket.io.js的本地副本。

😉