Node.js的socket.io服务器callback不起作用

我正在处理一个简单的Node.js双向客户端\服务器通信通道,我试图在服务器上使用socket.io ,在客户端上使用socket.io- client。

我已经插入了下面的代码,因为你会看到它是非常基本的东西,我在我的本地机器上运行 – 以最大限度地减less复杂性。

我看到的行为是:

  1. 我启动服务器。
  2. 服务器将“服务器启动”logging到控制台。
  3. 我启动客户端。
  4. 客户端日志“服务器已准备就绪!”
  5. 没有其他事情发生

我期望的是服务器login一个“客户端已经准备就绪!” 消息,然后是内容( '已收到' )。

我甚至使用过WireShark来嗅探线路,它确实显示客户端正在按照devise发出消息 – 但是服务器上的callback没有被触发。

我使用Express v3.1.0socket.io v0.9.13socket.io-client v0.9.11 (全部通过npm安装)运行node v0.8.4

这是服务器代码…

var http = require('http'), express = require('express'), app = express(), server = http.createServer(app); app.configure(function(){ app.use(express.static(__dirname + '/public')); }); server.listen(8080); console.log("Server started"); var io = require('socket.io').listen(server); io.sockets .on('connection', function(socket){ socket.emit('server ready', { msg: 'ready' }) ; }) .on('comms', function(content) { console.log('Client is ready!'); console.log(content); }); 

这里是客户端代码

  var clientio = require('socket.io-client'); var socket = new clientio.connect('http://localhost', { port: 8080 }); socket .on('server ready', function(data){ console.log('Server is ready!'); socket.emit('comms', 'Ready received'); }) .on('connect-error', function(error) { console.log('Connection Error\n' + error); }) .on('error', function(error) { console.log('Socket Error\n' + error); }) 

socket.iosocket.io-客户端的文档和例子都有点混淆(是慈善的),它们看起来有点移动目标…但是从我所知道的,我认为这应该起作用。

我希望有人能给我build议,我要去哪里错了?

在你的服务器上你有这样的代码:

 io.sockets .on('connection', function(socket){ socket.emit('server ready', { msg: 'ready' }) ; }) .on('comms', function(content) { console.log('Client is ready!'); console.log(content); }); 

你应该做的是这样的:

 io.sockets.on('connection', function(socket){ socket.emit('server ready', { msg: 'ready' }); socket.on('comm', function(content){ console.log('Client is ready!'); console.log(content); }); }); 

希望这或多或less是你所需要做的。 只是一些小的变化。

app.js

 var app = require('express')() , server = require('http').createServer(app) , io = require('socket.io').listen(server); // using 'connect' to handle static pages app.use(require('connect').static(__dirname + '/public')) server.listen(8080); app.get('/', function (req, res) { res.sendfile(__dirname + '/index.html'); }); io.sockets.on('connection', function (socket) { socket.emit('server ready', { msg: 'ready' }); socket.on('comms', function(content) { console.log(('Client is ready\n')); console.log(content); }); }); 

的index.html

 <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"> </script> <script> window.jQuery || document.write('<script src="js/jquery-1.8.3.min.js"><\/script>') </script> <script src="/socket.io/socket.io.js"></script> </head> <body> <script> (function (d, b) { function bindEvents() { function doSomething(msg) { $.each(msg, function (key, value) { console.log('doSomething...'); $("body").append("<p>" + value + "</p>") }); }; // var socket = io.connect(); var socket = io.connect('http://localhost'); socket.on('server ready', function (msg) { console.log('Server is ready!\n', msg); doSomething(msg); socket.emit('comms', { msg: 'Client is Ready' }); }); socket.on('connect-error', function (err) { console.log('Connection Error\n', err); }); socket.on('error', function (err) { console.log('Connection Error\n', err); }); }; $(document).ready(function () { bindEvents() }); })(jQuery, this) </script>