EADDRINUSE与node-webkit一起使用expressjs时

我想使用nw.js作为独立的套接字客户端和服务器。 我正在尝试将来自socket.io网站的示例 socket.io聊天应用程序放入一个nw.js应用程序中。 但是,当我开始nw.js我得到了以下错误:

[5591:0222/143044:ERROR:nw_shell.cc(325)] Error: listen EADDRINUSE :::3000 at Object.exports._errnoException (util.js:734:11) at exports._exceptionWithHostPort (util.js:757:20) at Server._listen2 (net.js:1153:14) at listen (net.js:1179:10) at Server.listen (net.js:1266:5) at Object.<anonymous> (/Users/xxxx/nwjs/chat-example/index.js:23:6) at Module._compile (module.js:451:26) at Object.Module._extensions..js (module.js:469:10) at Module.load (module.js:346:32) at Function.Module._load (module.js:301:12) 

我已经尝试了多个端口,没有工作。 这里是我使用的服务器的代码,大部分是由socket.io指南提供的。

 var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); app.get('/', function(req, res){ res.sendFile(__dirname + '/index.html'); }); io.on('connection', function(socket){ console.log('a user connected'); socket.on('disconnect', function(){ console.log('user disconnected'); }); socket.on('chat message', function(msg){ console.log('message: ' + msg); io.emit('chat message', msg); }); }); http.listen( 3000, function(){ console.log('listening on *:3000'); }); 

这是我的package.json nw.js

 { "name": "socket-chat-example", "version": "0.0.1", "description": "my first socket.io app", "dependencies": { "express": "^4.10.2", "socket.io": "^1.3.4" }, "main": "index.html", "node-main": "index.js" } 

我的nwjs版本: v0.12.0-alpha3-osx-x64

查看node-webkit-express作为一个工作示例。

我无法解释为什么,但通过“node-main”发起express是导致问题的原因。 也许这是一个多进程问题或其他问题…但你可以做到。

每次应用程序窗口重新加载,刷新或打开新窗口时,都会运行node-main脚本。 基本上你想要开始你的服务器脚本作为bg-script 。 这是清单文件 。 后台脚本在应用程序运行时运行一次,所以您应该启动服务器。

您可能还想要听取nwjs窗口closures事件,以便当应用程序closures时,可以正确closures服务器并清理干净。