在最新版本的Socket.IO上运行应用程序,而不是1.0

时间:2015-06-12 01:00:44

标签: node.js socket.io

我需要一些帮助才能使代码写入Socket.IO< 0.9适用于较新版本,如1.3:

var port = 843;

var io = require('socket.io').listen( port );
io.enable('browser client minification');  // send minified client
io.enable('browser client etag');          // apply etag caching logic based on version number
io.enable('browser client gzip');          // gzip the file
//io.set('log level', 1);  

io.sockets.on('connection', function (socket) {
  socket.on('woot_send', function(op){
    socket.broadcast.emit('woot_receive', op);
    if( op.type == 'cursor-create' && Object.keys(io.connected).length == 1 )
      socket.emit('woot_receive', {type: 'contents-init', contents: "Sample initial content that might be coming from permanent storage..."});
  });
  socket.on('woot_save', function(contents){
    console.log(contents);
  });
});

导致错误:

/home/celso/woot/node/app.js:4
io.enable('browser client minification');  // send minified client
   ^
TypeError: undefined is not a function
    at Object.<anonymous> (/home/celso/woot/node/app.js:4:4)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)
    at node.js:814:3

谢谢!

1 个答案:

答案 0 :(得分:2)

从版本1.0.0开始,socket.io删除了缩小版,etag和gzip。使用API​​不再存在io.enable函数,这就是它抛出错误的原因。 SocketIO现在提供带有gzip压缩和缩小版本的CDN。使用此选项可使您的客户端使用CDN。

<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>

引入1.0.0时的SocketIO,指定了described here的CDN传递方法。具体来说,CDN(由Google zopfli提供)提供高级别的压缩,适当的缓存支持和内置的SSL支持。

SocketIO作者的建议是:Originally listed in this closed Pull Request

  • /socket/socket.io.js用于开发。当然,它可以在生产中工作,但它不会被优化
  • CDN提供了所有更高级的功能,否则会破坏我们的代码库(缩小,压缩,缓存)。
  • 最终,如果选择不使用CDN,最好将socket.io用作构建系统的一部分(如webpack或browserify),并为整个构建引入缩小和压缩,而不是每个组件

此处存在相同主题的旧SO Question,但不包含CDN的最新版本。

如果您遇到io.enable以外的问题,可以找到migrating from 0.9 to higher versions of SocketIO的指南。

因此,您应该使用版本0.9中的io.enable函数删除行,并允许客户端使用上面列出的CDN中的socket.io