node.js - 我的nodejs简单代码有什么问题

标签 node.js socket.io

这是我的nodejs代码:

var io = require('socket.io').listen(8011);

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

客户端 html 是:

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>

当我使用 Node a.js 运行它时,出现以下错误:

node.js:134
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
TypeError: Object 8011 has no method 'listeners'
    at new <anonymous> (/home/zjm1126/node_modules/socket.io/lib/socket.io/listener.js:29:31)
    at Object.listen (/home/zjm1126/node_modules/socket.io/lib/socket.io/index.js:11:10)
    at Object.<anonymous> (/home/zjm1126/桌面/app/a.js:1:93)
    at Module._compile (module.js:407:26)
    at Object..js (module.js:413:10)
    at Module.load (module.js:339:31)
    at Function._load (module.js:298:12)
    at Array.<anonymous> (module.js:426:10)
    at EventEmitter._tickCallback (node.js:126:26)

但这是 http://socket.io/ 中的演示代码,为什么我会收到此错误?

更新:

当我运行npm update socket.io时,服务器端正在运行

但是客户端给出了这个错误:

io is not defined
 var socket = io.connect('http://localhost:8011');

这有什么问题吗?

最佳答案

您在下面指定的代码适用于 socket.io 0.7.x(API),而不适用于 0.6.x,因此这可能是错误所在。您应该尝试npm update socket.io 。根据 npm ls 我的依赖项如下:

alfred@alfred-laptop:~/node/socketio-demo$ npm ls
/home/alfred/node/socketio-demo
└─┬ socket.io@0.7.2 
  ├── policyfile@0.0.3 
  └── socket.io-client@0.7.2 

您还使用来自同一node.js服务器或其他服务器(例如PHP或其他服务器)的socket.io客户端html吗?

<小时/>

我也通过 PHP 进行了测试:

mkdir socketio-demo`
cd socketio-demo`
gedit server.js # my quick/dirty editor
<小时/>
var io = require('socket.io').listen(8011);

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});
<小时/>
alfred@alfred-laptop:~/node/socketio-demo$ node server.js 
   info  - socket.io started
<小时/>

我还有一个在端口 80 上运行的 PHP 服务器:

gedit socket.php
<小时/>
<script src="http://localhost:8011/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost:8011/');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>
<小时/>

在另一台主机上时,您需要更新 <script src="http://localhost:8011/socket.io/socket.io.js"></script>指向您的 socket.io 服务器

var socket = io.connect('http://localhost:8011/');指向您的 socket.io 服务器。使用这个设置,我让它正常工作,没有任何问题。

关于node.js - 我的nodejs简单代码有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6489583/

相关文章:

javascript - 当请求的凭据模式为 '*' 时,响应中的 Access-Control-Allow-Origin' header 不得为通配符 'include'

node.js - 通过 OAuth2 从 Node.js 向 BigQuery REST API 进行身份验证

node.js - 重命名 Sequelize 迁移表

javascript - Heroku Node.js + Socket.io : After deploying to Heroku, 我收到 ERR_CONNECTION_REFUSED

Java socket.io 客户端 portage

node.js - Socket.IO 连接用户数

node.js - 无法使用 Express Router() 进行 GET/POST

node.js - MongoDB 和 NodeJS : the options [servers] is not supported && the options [caseTranslate] is not supported

node.js - 实时应用对 pod 代码源的更改 - npm

javascript - 如何在客户端之间同步 microphysicals.js?