socket.io的NodeJS无法连接到服务器?(nodejs socket.io cannot

2019-06-23 17:20发布

我在Node.js和受socket.io例子整个下午一直盯着我试图拼凑出一个简单的页面,会告诉我,我已经有多少用户连接到服务器。

我已阅读的文档http://socket.io/问题以及一些教程/在这里,轮廓正是我试图做的。 我还发现创建简单的节点JS服务器和客户机不帮我。

版本信息:

Node.js的 - 0.6.15
快递 - 3.0.0alpha1
socket.io - 0.9.5(socket.io客户端是相同的版本,但是没有找到资源......见注释)
EJS - 0.7.1

这里是我的服务器代码:

var express = require('express'),
    config = {
        port: 4000,
        hostname: 'localhost'
    };

var server = module.exports = express.createServer();
    /* server configuration */
    server.use(express.cookieParser('keyboard unicorn'));
    server.use(express.bodyParser());
    server.use(express.methodOverride());
    server.use(express.session({ secret: 'keyboard unicorn' }));
    server.engine('.html', require('ejs').__express);
    server.set('views', __dirname + '/lib/views');
    server.set('view options', { layout: false });
    server.set('view engine', 'html');
    server.use(server.router);
    server.use('/', express.static(__dirname + '/lib/assets'));

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

var connections = { 'length': 0 };

io.sockets.on('connection', function(socket) {
    socket.__fd = socket.fd;
    connections[socket.__fd]=socket.remoteAddress;
    ++connections.length;
    console.log('user connected! There are a total of ' + connections.length + ' users online.');
    return socket.on('disconnect',function(){
        delete conns[socket.__fd];
        --connections.length;
        console.log('user disconnected! There are a total of ' + connections.length + ' users remaining online.');
    });
});

server.get('/', function( req, res ) {
    res.render('index', {
        'page_title': 'sample application',
        'number_of_connections': connections.length
    });
});

server.listen(config.port, config.hostname);

这里是我的客户端代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title><%= page_title %></title>
</head>
<body>
<div>There is a total of <%= number_of_connections %> user(s) connected.</div>
<script src="http://cdn.socket.io/stable/socket.io.js"></script>
<script type="text/javascript">
var socket = new io.Socket('localhost',{'port':4000});
socket.connect();
socket.on('connect', function() {
    console.log('connected');
});
</script>
</body>
</html>

这是当我运行的服务器,并与客户端连接发生了什么。

$ node server.js
   info  - socket.io started

然后,当我浏览到本地主机:4000在我的网页浏览器我得到“0”(NUMBER_OF_CONNECTIONS)的页面。 另外,我什么也看不到在终端服务器(在上。(“连接”永远不会打)。

在客户端,后一两秒钟,我开始得到错误的数量庞大(如果我离开控制台打开崩溃几秒页)见下图:

请用从哪里开始进行调试这个任何帮助,将不胜感激! 我只是想获得这个基本的例子和运行这样我就可以开始使用/理解玩的NodeJS和socket.io!

Answer 1:

问题是,因为现在快递是一个功能。

你需要做到以下几点:

var express = require('express');
var app = express();
var server = app.listen(3000);

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


Answer 2:

快递3.0.0alpha和socket.io不(直接)兼容,由于2 *和3 *之间的快速改变(或更确切地说,1之间的变化在连接*和2 *)。 我会建议您降级到2.5.9快递为暂时的,也可以按照这个建议从快车的作者,TJ Holowaychuk。



Answer 3:

我建立了一个测试环境,安装快车3.0和0.9.5 socket.io,并再现您的错误。

然后,我跑到npm install express@2.5.1由基于一对夫妇向后调整迁移指南 ,它跑了巨大的。

所以我要继续前进,并建议socket.io可能是不使用Express兼容3还,仍然看起来很不稳定。

我app.js调整了快递2:

var express = require('express'),
    config = {
    port: 8080,
    hostname: 'localhost'
};

var server = module.exports = express.createServer();
/* server configuration */
server.set('views', __dirname + '/lib/views');
server.set('view options', { layout: false });
server.set('view engine', 'ejs');
//server.register('.html', 'ejs');require('ejs').__express);
server.use(express.cookieParser('keyboard unicorn'));
server.use(express.bodyParser());
server.use(express.methodOverride());
server.use(express.session({ secret: 'keyboard unicorn' }));
server.use('/', express.static(__dirname + '/lib/assets'));
server.use(server.router);

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

io.set('log level', 2);

var connections = { 'length': 0 };

server.get('/', function( req, res ) {
        res.render('index', {
                'page_title': 'sample application',
                    'number_of_connections': connections.length
                    });
    });

io.sockets.on('connection', function(socket) {
        socket.__fd = socket.fd;
        connections[socket.__fd]=socket.remoteAddress;
        ++connections.length;
        console.log('user connected! There are a total of ' + connections.length + ' users online.');
        return socket.on('disconnect',function(){
                delete conns[socket.__fd];
                --connections.length;
                console.log('user disconnected! There are a total of ' + connections.length + ' users remaining online.');
            });
    });

server.listen(config.port);

我index.ejs文件:

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="utf-8">
   <title><%= page_title %></title>
</head>
<body>
<div>There is a total of <%= number_of_connections %> user(s) connected.</div>
<!--<script src="http://cdn.socket.io/stable/socket.io.js"></script>-->
<script src='/socket.io/socket.io.js'></script>
<script type="text/javascript">
   var socket = io.connect('http://hostname.com:8080');
   socket.on('connect', function() {
      console.log('connected');
   });
</script>
</body>
</html>

我希望这里的东西帮助。



Answer 4:

替换app.use(express.bodyParser());

app.use(express.json());
app.use(express.urlencoded());

...保存文件,重新启动节点服务器。



文章来源: nodejs socket.io cannot connect to server?