NodeJS + socket.io:简单的客户端/服务器示例不起作用

我正在使用NodeJS v0.4.8和最新版本的socket.io

npm安装socket.io

在Ubuntu上:

Linux mars 2.6.38-8-generic#42-Ubuntu SMP Mon Apr 11 03:31:50 UTC 2011 i686 i686 i386 GNU / Linux

不幸的是,下面的代码不会在客户端和服务器端产生任何输出。

有人有线索吗?

服务器端

var http = require('http'), io = require('socket.io'), fs = require('fs'), sys = require('sys'); respcont = fs.readFileSync('testclient.js'); server = http.createServer(function(req, res){ res.writeHead(200, {'Content-Type': 'text/html'}); res.end(respcont); }); server.listen(8082); var socket = io.listen(server); socket.on('connection', function(client){ sys.puts("New client is here!"); client.send("hello world"); client.on('message', function(msg) { sys.puts("client has sent:"+msg); }) ; client.on('disconnect', function() { sys.puts("Client has disconnected"); }) ; }); 

客户端

 <html> <body> <script type="text/javascript" src="http://localhost:8082/socket.io/socket.io.js"></script> <script> var socket = new io.Socket(null,{port:8082,rememberTransport:true,timeout:1500}); socket.connect(); socket.on('connect', function() { console.log('connected to server'); socket.send('Hi Server...'); }); socket.on('message', function() { console.log('received a message!'); }); socket.on('disconnect', function() { console.log('disconnected from server'); }); </script> </body> </html> 

NodeJS的输出(不是sys.puts(“…”)调用)是:

信息 – socket.io启动debugging – 服务静态/socket.io.jsdebugging – 客户端授权信息 – 握手授权信息 – 握手b61a5c2751c1c8c8493db4b79d19e779

我也(像Derrish)喜欢使用快速框架来简化我的工作( 真棒:) )。 您可以从http://dl.dropbox.com/u/314941/socketio.zip下载并提取此示例&#x3002; 我相信你甚至不必安装这些模块,因为我已经在本地捆绑了他们( 只是运行 )感谢npm :)。

如何安装:

 alfred@alfred-laptop:~/tmp/socketio$ uname -a Linux alfred-laptop 2.6.35-28-generic #50-Ubuntu SMP Fri Mar 18 19:00:26 UTC 2011 i686 GNU/Linux alfred@alfred-laptop:~/tmp$ wget http://dl.dropbox.com/u/314941/socketio.zip alfred@alfred-laptop:~/tmp$ unzip socketio.zip alfred@alfred-laptop:~/tmp$ cd socketio/ alfred@alfred-laptop:~/tmp/socketio$ node -v v0.4.7 alfred@alfred-laptop:~/tmp/socketio$ npm -v 1.0.6 alfred@alfred-laptop:~/tmp/socketio$ node app.js 

代码:

app.js:

 // npm install express // npm install socket.io var sys = require('sys'), express = require('express'), app = express.createServer('127.0.0.1'), io = require('socket.io'); app.use(express.static(__dirname + '/public')); app.get('/', function (req, res) { res.send('Hello World'); }); app.listen(3000); var socket = io.listen(app); socket.on('connection', function (client){ // new client is here! setTimeout(function () { client.send('Waited two seconds!'); }, 2000); client.on('message', function () { }) ; client.on('disconnect', function () { }); }); 

公共/ index.html的:

 <html> <p id="text">socket.io</p> <script src="socket.io/socket.io.js"></script> <script src="jquery-1.6.1.min.js"></script><!-- Downloaded Jquery --> <script> $(document).ready(function(){ var socket = new io.Socket(), text = $('#text'); socket.connect(); socket.on('connect', function () { text.html('connected'); }); socket.on('message', function (msg) { text.html(msg); }); socket.on('disconnect', function () { text.html('disconnected'); }); }); </script> 

我的模块清单:

 alfred@alfred-laptop:~/tmp/socketio$ npm ls /home/alfred/tmp/socketio ├─┬ express@2.3.11 │ ├── connect@1.4.6 │ ├── mime@1.2.2 │ └── qs@0.1.0 └── socket.io@0.6.18 

安装模块(不是必需的):

 npm install express npm install socket.io 

浏览器将显示:

  1. socket.io开始,但可能你不能看到这个,因为它将被replaceconnected
  2. 当用户连接到socket.io时连接。
  3. 2秒后将显示Waited two seconds! 图片

Express 3.0 + Socket.io工作示例

服务器(app.js)

 var express = require('express'); var app = express.createServer(); var socket = require('socket.io'); app.configure(function(){ app.use(express.static(__dirname + '/')); }); var server = app.listen(8081); var io = socket.listen(server); io.sockets.on('connection', function (socket) { console.log("connnect"); socket.on('disconnect', function (socket) { console.log("disconnect"); }); }); 

客户端(index.html)

 <script src="/socket.io/socket.io.js"></script> <script> var socket = io.connect('http://localhost:8081'); </script> 

你可以使用下面的链接分叉代码https://github.com/sreekumar-kr/Expree3.0—Socket.IO

我把你的例子,并使用快递放在一个节点的应用程序。 您的HTML代码被放置在公共的静态HTML文件中。 你的例子工作正常。 代码如下所示。 我想确保socket.io脚本文件和HTML文件都正确地被提供。

 var http = require('http'), io = require('socket.io'), express = require('express'); var app = module.exports = express.createServer(); // Configuration app.configure(function(){ app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(__dirname + '/public')); }); if (!module.parent) { app.listen(9000); console.log("server started at %s", (new Date()).toUTCString()); console.log("listening on port %d", app.address().port); } // socket.io var socket = io.listen(app); socket.on('connection', function(client){ console.log("New client is here!"); client.send("hello world"); client.on('message', function(msg){ console.log("client has sent:"+msg); }) ; client.on('disconnect', function(){ console.log("Client has disconnected"); }) ; client.on('disconnect', function(){ }) });