socket.io – 不能得到它的工作,有404的某种投票电话

我试图得到一个与socket.io设置的服务器,结果不好。

我主要是遵循这个指南,虽然它有点过时了: http : //www.williammora.com/2013/03/nodejs-tutorial-building-chatroom-with.html

问题出在socket.io上,我不确定它是客户端还是服务器端。 这似乎是试图不断轮询服务器,但得到了404的回来。 这听起来像socket.io没有运行,但这一切对我来说都没问题。 这也可能与path有关,并有一个“公共”目录,但我不知道。

127.0.0.1 - - [Thu, 17 Jul 2014 00:51:36 GMT] "GET /socket.io/?EIO=2&transport=polling&t=1405558296120-0 HTTP/1.1" 404 73 "http://localhost:8080/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.76.4 (KHTML, like Gecko) Version/7.0.4 Safari/537.76.4" 127.0.0.1 - - [Thu, 17 Jul 2014 00:51:37 GMT] "GET /socket.io/?EIO=2&transport=polling&t=1405558297181-1 HTTP/1.1" 404 73 "http://localhost:8080/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.76.4 (KHTML, like Gecko) Version/7.0.4 Safari/537.76.4" 127.0.0.1 - - [Thu, 17 Jul 2014 00:51:39 GMT] "GET /socket.io/?EIO=2&transport=polling&t=1405558299207-2 HTTP/1.1" 404 73 "http://localhost:8080/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.76.4 (KHTML, like Gecko) Version/7.0.4 Safari/537.76.4" 

服务器

 var exec = require( "child_process" ).exec; var path = require( "path" ); var morgan = require( "morgan" ); var bodyParser = require( "body-parser" ); var _ = require( "underscore" ); var express = require( "express" ); var app = express(); var http = require( "http" ).createServer( app ); var io = require( "socket.io" )( http ); app.set( "ipaddr", "127.0.0.1" ); app.set( "port", 8080 ); //support JSON, urlencoded, and multipart requests app.use( bodyParser() ); //log the requests using morgan app.use( morgan() ); //specify the Jade views folder app.set( "views", __dirname + "/../views" ); //set the view engine to Jade app.set( "view engine", "jade" ); //specify static content app.use( express[ "static" ]( "public", __dirname + "/../public" ) ); //using map-access of static so jslint won't bitch io.on( "connection", function( socket ) { console.log( "A user connected." ); }); 

客户

 script( src="js/socket.io.js" ) var socket = io.connect( "http://localhost:8080" ); 

我从:node_modules / socket.io / node_modules / socket.io-client / socket.io.js获取客户端js文件

这个path与我正在使用的教程所说的或者socket.io所说的使用不匹配,所以也许就是这个问题,但是看起来它可能是正确的文件。

任何帮助吗?

编辑有关其他信息,这里是我的文件夹层次结构:

 Webserver/ my_modules/ server.js node_modules/ body-parser/ express/ jade/ morgan/ socket.io/ underscore/ public/ css/ js/ server.js views/ index.jade index.js package.json 

my_modules文件夹中的server.js是我在服务器端启动socket.io的地方。 js文件夹中的server.js是从网站连接的客户端代码。

看起来像Socket.IO不能拦截以/socket.io/开头的请求。 这是因为在你的情况下,侦听器是app – 一个Express处理程序。 你必须使http成为监听器,以便Socket.IO可以访问请求处理。

尝试更换

 app.set( "ipaddr", "127.0.0.1" ); app.set( "port", 8080 ); 

 http.listen(8080, "127.0.0.1"); 

有关详细信息,请参阅文档: http : //socket.io/docs/#using-with-express-3/4

只是为了检查你的服务器或客户端的问题,你可以使用这个web: websocket-echo ,如果这个客户端连接到你的服务器(第一个客户端是有用的,如果你的服务器在线,如果在你的主机上, websocket.org …

使用文本编辑器,将以下代码复制并保存为websocket.html硬盘上的某处

代码: websockettesting

唯一不同于我的,我可以观察到的是客户端的io客户端源代码: <script src="/socket.io/socket.io.js"></script>

在你的服务器上,你应该尝试这种方式:

 var express = require('express'), app = express(), http = require('http'), server = http.createServer(app), io = require('socket.io').listen(server), exec = require('child_process').exec, util = require('util'); //serve our code app.use(express.static('public')); app.use(express.json()); app.use(express.urlencoded()); //listening on connections io.on('connection', function (socket) { console.log('client connected!'); } server.listen(8080); 

请注意,这种方式适用于这种依赖关系:我build议你将下面的代码添加到你的package.json文件中:

 "dependencies": { "express": "3.xx", "socket.io": "*", "util": "*" } 

干杯!

就我而言,我使用Express应用程序生成器创build了我的应用程序 。 为了解决这个问题,我没有编辑项目的根文件夹中的app.js文件,而是在定义了服务器之后,编辑了文件bin / www:

 /** * Create HTTP server. */ var server = http.createServer(app); var io = require('socket.io')(server); // Add this here 

更新

我在这里find了一个更好的方法Express Generator和Socket.io